IoWMISetSingleInstance

NTSTATUS __stdcall IoWMISetSingleInstance(
        VOID *DataBlockObject,
        _UNICODE_STRING *InstanceName,
        UINT64 Version,
        UINT64 ValueBufferSize,
        VOID *ValueBuffer){
  int v5; 
  size_t v8; 
  int v9; 
  _QWORD *Wnode; 
  __int64 v11; 
  int v12; 
  __int64 v13; 
  UINT64 OutBufferSize; 
  UINT64 InstanceNameOffset; 
  UINT64 ValidSize; 
  PVOID P; 

  P = 0i64;
  InstanceNameOffset = 0i64;
  v5 = Version;
  LODWORD(ValidSize) = 0;
  v8 = ValueBufferSize;
  v9 = WmipAllocateSingleInstanceWnode(
         0x40ui64,
         InstanceName,
         (unsigned int)ValueBufferSize,
         (UINT64 *)((char *)&InstanceNameOffset + 4),
         &ValidSize,
         &InstanceNameOffset,
         &P);
  if( v9 >= 0 )
  {
    Wnode = P;
    v11 = HIDWORD(InstanceNameOffset);
    v12 = InstanceNameOffset;
    *((_DWORD *)P + 11) = 2;
    Wnode[2] = 0i64;
    *(_DWORD *)Wnode = v12;
    *((_DWORD *)Wnode + 3) = 0;
    *((_DWORD *)Wnode + 2) = v5;
    *((_DWORD *)Wnode + 12) = v11;
    *(_WORD *)((char *)Wnode + v11) = InstanceName->Length;
    memmove((char *)Wnode + v11 + 2, InstanceName->Buffer, InstanceName->Length);
    v13 = (unsigned int)ValidSize;
    *((_DWORD *)Wnode + 15) = v8;
    *((_DWORD *)Wnode + 14) = v13;
    memmove((char *)Wnode + v13, ValueBuffer, v8);
    LODWORD(ValidSize) = *(_DWORD *)Wnode;
    LODWORD(OutBufferSize) = v12;
    v9 = WmipQuerySetExecuteSI(DataBlockObject, 0i64, 0, 2u, Wnode, OutBufferSize, &ValidSize);
    ExFreePoolWithTag(Wnode, 0);
  }
  return v9;
}

Referenced by:

No references.