PiCMSetRegistryProperty
NTSTATUS __stdcall PiCMSetRegistryProperty(
VOID *IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
VOID *IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
UINT64 *v5;
unsigned int v6;
int v8;
NTSTATUS v9;
UINT64 PropertySize;
UINT8 *PropertyBuffer;
INT64 v13;
UINT64 v14;
_UNICODE_STRING DestinationString;
_CMAPI_INPUT_REGISTRY_PROPERTY_DATA RegistryPropertyData[4];
_CMAPI_REG_PROP CmapiRegistryProperty[4];
UINT64 v18[2];
INT64 v19;
UINT64 *PnpRtlRegistryProperty;
v5 = PnpRtlRegistryProperty;
v6 = IoctlOutputBufferSize;
LODWORD(PnpRtlRegistryProperty) = 0;
v19 = 0i64;
*(_DWORD *)v5 = 0;
*(_OWORD *)RegistryPropertyData = 0i64;
*(_OWORD *)CmapiRegistryProperty = 0i64;
*(_OWORD *)v18 = 0i64;
v8 = PiCMCaptureRegistryPropertyInputData(
IoctlInputBuffer,
IoctlInputBufferSize,
(unsigned int)BytesUsed,
RegistryPropertyData);
if( v8 >= 0 )
{
if( PiAuDoesClientHaveAccess(CmapiRegistryProperty[3] == CMAPI_REG_PROP_FRIENDLYNAME ? 64 : 2) )
{
if( *(_QWORD *)CmapiRegistryProperty && !RegistryPropertyData[1] && IoctlOutputBuffer && v6 >= 8 )
{
v9 = PiCMConvertRegistryProperty(CmapiRegistryProperty[3], (_CM_REG_PROP *)&PnpRtlRegistryProperty);
if( v9 >= 0 )
{
if( RegistryPropertyData[2] == 1 )
{
LODWORD(v14) = 0;
LODWORD(v13) = v19;
LODWORD(PropertySize) = v18[0];
v9 = PiPnpRtlSetDeviceRegProperty(
*(&stru_140CF2E80 + 607),
*(const WCHAR **)CmapiRegistryProperty,
0i64,
(_CM_REG_PROP)PnpRtlRegistryProperty,
PropertySize,
(UINT8 *)v18[1],
v13,
v14);
if( v9 >= 0 )
{
DestinationString = 0i64;
if( RtlInitUnicodeStringEx(&DestinationString, *(WCHAR **)CmapiRegistryProperty) >= 0 )
PnpSetDeviceInstancePropertyChangeEventFromDeviceInstance(&DestinationString.Length);
}
}
else if( RegistryPropertyData[2] == 2 )
{
LODWORD(v13) = v19;
LODWORD(PropertySize) = v18[0];
v9 = CmSetInstallerClassRegProp(
*(&stru_140CF2E80 + 607),
*(const WCHAR **)CmapiRegistryProperty,
0i64,
(unsigned int)PnpRtlRegistryProperty,
PropertySize,
(UINT8 *)v18[1],
v13,
v14);
}
else
{
v9 = -1073741811;
}
if( v9 == -1073741790 )
v9 = -1073741264;
}
}
else
{
v9 = -1073741811;
}
}
else
{
v9 = -1073741790;
}
v8 = PiCMReturnBasicResultData(
(unsigned int)v9,
HIDWORD(v19),
IoctlOutputBuffer,
v6,
v5,
(INT64)PropertyBuffer,
v13,
v14);
}
PiCMReleaseRegistryPropertyInputData(RegistryPropertyData);
return v8;
}Referenced by:
PiCMHandleIoctl