PiCMSetRegistryProperty
INT64 __stdcall PiCMSetRegistryProperty(
PVOID IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
PVOID IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
UINT64 *v5;
unsigned int v6;
int v8;
int v9;
struct _UNICODE_STRING DestinationString;
INT64 v12[2];
PCWSTR SourceString[2];
__int128 v14;
UINT64 ExpectedOutputSize;
UINT64 *v16;
v5 = v16;
v6 = IoctlOutputBufferSize;
LODWORD(v16) = 0;
ExpectedOutputSize = 0i64;
*(_DWORD *)v5 = 0;
*(_OWORD *)v12 = 0i64;
*(_OWORD *)SourceString = 0i64;
v14 = 0i64;
v8 = PiCMCaptureRegistryPropertyInputData(
(unsigned __int64)IoctlInputBuffer,
IoctlInputBufferSize,
(int)BytesUsed,
(__int64)v12);
if( v8 >= 0 )
{
if( PiAuDoesClientHaveAccess(HIDWORD(SourceString[1]) == 13 ? 64 : 2) )
{
if( SourceString[0] && !HIDWORD(v12[0]) && IoctlOutputBuffer && v6 >= 8 )
{
v9 = PiCMConvertRegistryProperty(SHIDWORD(SourceString[1]), &v16);
if( v9 >= 0 )
{
if( LODWORD(v12[1]) == 1 )
{
v9 = PiPnpRtlSetDeviceRegProperty(
PiPnpRtlCtx,
SourceString[0],
0i64,
(signed int)v16,
v14,
*((int **)&v14 + 1),
ExpectedOutputSize,
0);
if( v9 >= 0 )
{
DestinationString = 0i64;
if( (int)RtlInitUnicodeStringEx(&DestinationString, (WCHAR *)SourceString[0]) >= 0 )
PnpSetDeviceInstancePropertyChangeEventFromDeviceInstance(&DestinationString);
}
}
else if( LODWORD(v12[1]) == 2 )
{
v9 = CmSetInstallerClassRegProp(
PiPnpRtlCtx,
(__int64)SourceString[0],
0i64,
(unsigned int)v16,
v14,
*((void **)&v14 + 1),
ExpectedOutputSize);
}
else
{
v9 = -1073741811;
}
if( v9 == -1073741790 )
v9 = -1073741264;
}
}
else
{
v9 = -1073741811;
}
}
else
{
v9 = -1073741790;
}
v8 = PiCMReturnBasicResultData((unsigned int)v9, HIDWORD(ExpectedOutputSize), IoctlOutputBuffer, v6, v5);
}
PiCMReleaseRegistryPropertyInputData((INT64)v12);
return(unsigned int)v8;
}Referenced by:
No references.