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