SmStorePhysicalRequestIssue
INT64 __fastcall SmStorePhysicalRequestIssue(
_DEVICE_OBJECT *DeviceObject,
UINT64 ControlCode,
VOID *RequestBuffer,
UINT64 InputBufferSize,
UINT64 OutputBufferSize,
UINT64 *Information){
int v7;
int v9;
UINT16 v10;
unsigned __int64 v11;
signed __int64 v12;
void *v13;
void *v14;
unsigned int v15;
struct _KEVENT Event;
VOID *v18;
__int64 savedregs;
UINT64 retaddr;
__int64 v21;
v7 = ControlCode;
v9 = InputBufferSize;
KeInitializeEvent(&Event, NotificationEvent, 0);
v10 = 72 * *((char *)DeviceObject + 76) + 208;
v11 = v10 + 15i64;
if( v11 <= v10 )
v11 = 0xFFFFFFFFFFFFFF0i64;
v12 = v11 & 0xFFFFFFFFFFFFFFF0ui64;
v13 = alloca(v12);
v14 = alloca(v12);
IoInitializeIrp((_IRP *)&Event, v10, *((_BYTE *)DeviceObject + 76));
v18 = RequestBuffer;
*(_QWORD *)(v21 - 16) = SmKmGenericCompletion;
*(_QWORD *)(v21 - 8) = &Event;
*(_BYTE *)(v21 - 69) = -32;
*(_BYTE *)(v21 - 72) = 14;
*(_QWORD *)(v21 - 32) = DeviceObject;
*(_DWORD *)(v21 - 48) = v7;
*(_DWORD *)(v21 - 56) = v9;
*(_DWORD *)(v21 - 64) = OutputBufferSize;
v15 = IofCallDriver(DeviceObject, (PIRP)&Event);
if( v15 == 259 )
{
KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
v15 = savedregs;
}
*Information = retaddr;
return v15;
}Referenced by:
SmStoreCreate
SmStoreDelete
SmStoreResize