IoWMISetSingleInstance

NTSTATUS __stdcall IoWMISetSingleInstance(
        PVOID DataBlockObject,
        _UNICODE_STRING *InstanceName,
        UINT64 Version,
        UINT64 ValueBufferSize,
        PVOID ValueBuffer){
  int v5; 
  unsigned int v8; 
  NTSTATUS SetExecuteSI; 
  _QWORD *a5; 
  __int64 v11; 
  int v12; 
  __int64 v13; 
  UINT64 BufferLength; 
  UINT64 InstanceNameOffset; 
  INT64 a7; 
  void *P[2]; 
  P[0] = 0i64;
  InstanceNameOffset = 0i64;
  v5 = Version;
  LODWORD(a7) = 0;
  v8 = ValueBufferSize;
  SetExecuteSI = WmipAllocateSingleInstanceWnode(
                   0x40ui64,
                   InstanceName,
                   (unsigned int)ValueBufferSize,
                   (UINT64 *)((char *)&InstanceNameOffset + 4),
                   (UINT64 *)&a7,
                   &InstanceNameOffset,
                   P);
  if( SetExecuteSI >= 0 )
  {
    a5 = P[0];
    v11 = HIDWORD(InstanceNameOffset);
    v12 = InstanceNameOffset;
    *((_DWORD *)P[0] + 11) = 2;
    a5[2] = 0i64;
    *(_DWORD *)a5 = v12;
    *((_DWORD *)a5 + 3) = 0;
    *((_DWORD *)a5 + 2) = v5;
    *((_DWORD *)a5 + 12) = v11;
    *(_WORD *)((char *)a5 + v11) = InstanceName->Length;
    memmove((UINT8 *)a5 + v11 + 2, (UINT8 *)InstanceName->Buffer, InstanceName->Length);
    v13 = (unsigned int)a7;
    *((_DWORD *)a5 + 15) = v8;
    *((_DWORD *)a5 + 14) = v13;
    memmove((UINT8 *)a5 + v13, (UINT8 *)ValueBuffer, v8);
    LODWORD(a7) = *(_DWORD *)a5;
    LODWORD(BufferLength) = v12;
    SetExecuteSI = WmipQuerySetExecuteSI(
                     (_ADAPTER_OBJECT *)DataBlockObject,
                     0i64,
                     0,
                     2u,
                     (INT64)a5,
                     BufferLength,
                     (INT64)&a7);
    ExFreePoolWithTag(a5, 0);
  }
  return SetExecuteSI;
}

Referenced by:

No references.