IoWMISetSingleInstance
NTSTATUS __stdcall IoWMISetSingleInstance(
PVOID DataBlockObject,
_UNICODE_STRING *InstanceName,
UINT64 Version,
UINT64 ValueBufferSize,
PVOID ValueBuffer){
int v5;
unsigned int v8;
NTSTATUS SetExecuteSI;
_QWORD *a5;
__int64 v11;
int v12;
__int64 v13;
UINT64 BufferLength;
UINT64 InstanceNameOffset;
INT64 a7;
void *P[2];
P[0] = 0i64;
InstanceNameOffset = 0i64;
v5 = Version;
LODWORD(a7) = 0;
v8 = ValueBufferSize;
SetExecuteSI = WmipAllocateSingleInstanceWnode(
0x40ui64,
InstanceName,
(unsigned int)ValueBufferSize,
(UINT64 *)((char *)&InstanceNameOffset + 4),
(UINT64 *)&a7,
&InstanceNameOffset,
P);
if( SetExecuteSI >= 0 )
{
a5 = P[0];
v11 = HIDWORD(InstanceNameOffset);
v12 = InstanceNameOffset;
*((_DWORD *)P[0] + 11) = 2;
a5[2] = 0i64;
*(_DWORD *)a5 = v12;
*((_DWORD *)a5 + 3) = 0;
*((_DWORD *)a5 + 2) = v5;
*((_DWORD *)a5 + 12) = v11;
*(_WORD *)((char *)a5 + v11) = InstanceName->Length;
memmove((UINT8 *)a5 + v11 + 2, (UINT8 *)InstanceName->Buffer, InstanceName->Length);
v13 = (unsigned int)a7;
*((_DWORD *)a5 + 15) = v8;
*((_DWORD *)a5 + 14) = v13;
memmove((UINT8 *)a5 + v13, (UINT8 *)ValueBuffer, v8);
LODWORD(a7) = *(_DWORD *)a5;
LODWORD(BufferLength) = v12;
SetExecuteSI = WmipQuerySetExecuteSI(
(_ADAPTER_OBJECT *)DataBlockObject,
0i64,
0,
2u,
(INT64)a5,
BufferLength,
(INT64)&a7);
ExFreePoolWithTag(a5, 0);
}
return SetExecuteSI;
}Referenced by:
No references.