IoCreateController
INT8 *__fastcall IoCreateController(UINT64 a1){
char *v1;
int v2;
VOID *Flags;
UINT64 Flagsa;
UINT64 ObjectBodySize;
UINT64 PagedPoolCharge;
UINT64 NonPagedPoolCharge;
_OBJECT_ATTRIBUTES ObjectAttributes;
PVOID NewObject;
PVOID Handle;
v1 = 0i64;
v2 = a1;
LODWORD(NonPagedPoolCharge) = 0;
LODWORD(PagedPoolCharge) = 0;
*(_QWORD *)&ObjectAttributes.Length = 48i64;
memset(&ObjectAttributes.Attributes + 1, 0, 20);
ObjectAttributes.Attributes = IopCaseInsensitive != 0 ? 576 : 512;
NewObject = 0i64;
Handle = 0i64;
*(_OWORD *)&ObjectAttributes.RootDirectory = 0ui64;
LODWORD(ObjectBodySize) = a1 + 72;
if( ObCreateObjectEx(
0i64,
IoControllerObjectType,
&ObjectAttributes,
0i64,
Flags,
ObjectBodySize,
PagedPoolCharge,
NonPagedPoolCharge,
&NewObject,
0i64) >= 0 )
{
LODWORD(Flagsa) = 0;
if( ObInsertObjectEx(NewObject, 0i64, 3ui64, 1ui64, Flagsa, &NewObject, &Handle) >= 0 )
{
ObCloseHandle(Handle, 0);
v1 = (char *)NewObject;
memset(NewObject, 0i64, v2 + 72);
*(_WORD *)v1 = 2;
*((_WORD *)v1 + 1) = v2 + 72;
*((_QWORD *)v1 + 1) = v1 + 72;
KeInitializeDeviceQueue((PKDEVICE_QUEUE)(v1 + 16));
}
}
return v1;
}Referenced by:
No references.