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