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.