SmStorePhysicalRequestIssue
NTSTATUS __stdcall SmStorePhysicalRequestIssue(
_DEVICE_OBJECT *DeviceObject,
UINT64 ControlCode,
VOID *RequestBuffer,
UINT64 InputBufferSize,
UINT64 OutputBufferSize,
UINT64 *Information,
INT64 a7,
INT64 a8,
INT64 a9,
INT64 a10,
INT64 a11,
INT64 a12,
INT64 a13,
INT64 a14,
INT64 a15,
INT64 a16,
INT64 a17,
INT64 a18){
int v19;
int v21;
UINT16 v22;
unsigned __int64 v23;
signed __int64 v24;
void *v25;
void *v26;
NTSTATUS v27;
char Object[24];
VOID *v30;
__int64 savedregs;
UINT64 retaddr;
v19 = ControlCode;
v21 = InputBufferSize;
KeInitializeEvent((INT64)Object, 0, 0);
v22 = 72 * DeviceObject->StackSize + 208;
v23 = v22 + 15i64;
if( v23 <= v22 )
v23 = 0xFFFFFFFFFFFFFF0i64;
v24 = v23 & 0xFFFFFFFFFFFFFFF0ui64;
v25 = alloca(v24);
v26 = alloca(v24);
IoInitializeIrp((PIRP)Object, v22, DeviceObject->StackSize);
v30 = RequestBuffer;
*(_QWORD *)(a16 - 16) = SmKmGenericCompletion;
*(_QWORD *)(a16 - 8) = Object;
*(_BYTE *)(a16 - 69) = -32;
*(_BYTE *)(a16 - 72) = 14;
*(_QWORD *)(a16 - 32) = DeviceObject;
*(_DWORD *)(a16 - 48) = v19;
*(_DWORD *)(a16 - 56) = v21;
*(_DWORD *)(a16 - 64) = OutputBufferSize;
v27 = IofCallDriver((UINT64)DeviceObject, (UINT64)Object);
if( v27 == 259 )
{
KeWaitForSingleObject((UINT64)Object, 0, 0, 0, 0i64);
v27 = savedregs;
}
*Information = retaddr;
return v27;
}Referenced by:
SmStoreCreate