IoWMISetSingleItem

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

Referenced by:

No references.