IoWMISetSingleItem
NTSTATUS __stdcall IoWMISetSingleItem(
VOID *DataBlockObject,
_UNICODE_STRING *InstanceName,
UINT64 DataItemId,
UINT64 Version,
UINT64 ValueBufferSize,
VOID *ValueBuffer){
int v6;
int v7;
int v10;
_QWORD *Wnode;
__int64 v12;
int v13;
__int64 v14;
UINT64 OutBufferSize;
UINT64 InstanceNameOffset;
UINT64 ValidSize;
PVOID P;
P = 0i64;
v6 = Version;
InstanceNameOffset = 0i64;
v7 = DataItemId;
LODWORD(ValidSize) = 0;
v10 = WmipAllocateSingleInstanceWnode(
0x44ui64,
InstanceName,
(unsigned int)ValueBufferSize,
(UINT64 *)((char *)&InstanceNameOffset + 4),
&ValidSize,
&InstanceNameOffset,
&P);
if( v10 >= 0 )
{
Wnode = P;
v12 = HIDWORD(InstanceNameOffset);
v13 = InstanceNameOffset;
*((_DWORD *)P + 11) = 4;
Wnode[2] = 0i64;
*(_DWORD *)Wnode = v13;
*((_DWORD *)Wnode + 3) = 0;
*((_DWORD *)Wnode + 2) = v6;
*((_DWORD *)Wnode + 14) = v7;
*((_DWORD *)Wnode + 12) = v12;
*(_WORD *)((char *)Wnode + v12) = InstanceName->Length;
memmove((char *)Wnode + v12 + 2, InstanceName->Buffer, InstanceName->Length);
v14 = (unsigned int)ValidSize;
*((_DWORD *)Wnode + 16) = ValueBufferSize;
*((_DWORD *)Wnode + 15) = v14;
memmove((char *)Wnode + v14, ValueBuffer, ValueBufferSize);
LODWORD(ValidSize) = *(_DWORD *)Wnode;
LODWORD(OutBufferSize) = v13;
v10 = WmipQuerySetExecuteSI(DataBlockObject, 0i64, 0, 3u, Wnode, OutBufferSize, &ValidSize);
ExFreePoolWithTag(Wnode, 0);
}
return v10;
}Referenced by:
No references.