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.