NtCreateIoCompletion
NTSTATUS __stdcall NtCreateIoCompletion(
PVOID *IoCompletionHandle,
UINT64 DesiredAccess,
OBJECT_ATTRIBUTES *ObjectAttributes,
UINT64 a4){
unsigned int v4;
unsigned int v5;
char v7;
__int64 v8;
NTSTATUS Object;
UINT64 v10;
_QWORD *v11;
__int64 v13;
__int64 v14;
PVOID Handle;
void *Queue[4];
v4 = a4;
v5 = DesiredAccess;
Handle = 0i64;
Queue[0] = 0i64;
v7 = *((_BYTE *)KeGetCurrentThread() + 562);
if( v7 )
{
v8 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)IoCompletionHandle < 0x7FFFFFFF0000i64 )
v8 = (__int64)IoCompletionHandle;
*(_QWORD *)v8 = *(_QWORD *)v8;
}
Object = ObCreateObjectEx(v7, IoCompletionObjectType, (__int64)ObjectAttributes, v7, v13, 80, 0, 0, Queue, 0i64);
if( Object >= 0 )
{
v10 = v4;
v11 = Queue[0];
KeInitializeQueue((_KQUEUE *)Queue[0], v10);
v11[8] = 0i64;
*((_BYTE *)v11 + 72) = 0;
LODWORD(v14) = 0;
Object = ObInsertObjectEx(v11, 0i64, v5, 0i64, v14, 0i64, &Handle);
if( Object >= 0 )
*IoCompletionHandle = Handle;
}
return Object;
}Referenced by:
No references.