PiCMSetObjectProperty
NTSTATUS __stdcall PiCMSetObjectProperty(
PVOID IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
PVOID IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
unsigned int v5;
unsigned int v8;
NTSTATUS v9;
int v10;
int v11;
WCHAR *v12;
int v13;
int v14;
unsigned int v15;
int v16;
int v18;
int v19;
int v20;
int v21;
INT64 v22;
int v23;
int v24;
int v25;
INT64 v26;
INT64 v27;
INT64 v28;
INT64 v29;
INT64 v30;
UINT64 v31;
UINT64 v32;
int v33;
struct _UNICODE_STRING DestinationString;
UINT64 *v35;
INT64 result;
int v37;
PCWSTR SourceString;
INT64 v39;
__int64 v40;
int v41;
int v42;
__int64 v43;
int v44;
UINT64 ExpectedOutputSize;
UINT64 *v46;
v5 = IoctlInputBufferSize;
v35 = v46;
v8 = IoctlOutputBufferSize;
memset((INT64)&result, 0i64);
*(_DWORD *)v46 = 0;
v9 = PiCMCapturePropertyInputData((UINT64)IoctlInputBuffer, v5, (unsigned int)BytesUsed, (INT64)&result);
if( v9 >= 0 )
{
v10 = v37;
v11 = v42;
v12 = (WCHAR *)SourceString;
*(_QWORD *)&DestinationString.Length = v43;
v33 = v44;
if( v41 == 14 )
{
v27 = v39 - *(_QWORD *)&DEVPKEY_Device_FriendlyName.fmtid.Data1;
if( v39 == *(_QWORD *)&DEVPKEY_Device_FriendlyName.fmtid.Data1 )
v27 = v40 - *(_QWORD *)DEVPKEY_Device_FriendlyName.fmtid.Data4;
if( !v27 )
goto LABEL_49;
}
if( v41 == 3 )
{
v22 = v39 - *(_QWORD *)&DEVPKEY_Device_FriendlyNameAttributes.fmtid.Data1;
if( v39 == *(_QWORD *)&DEVPKEY_Device_FriendlyNameAttributes.fmtid.Data1 )
v22 = v40 - *(_QWORD *)DEVPKEY_Device_FriendlyNameAttributes.fmtid.Data4;
if( !v22 )
goto LABEL_49;
}
if( v41 == 4 )
{
v26 = v39 - DEVPKEY_DriverPackage_SourceMediaPath;
if( v39 == DEVPKEY_DriverPackage_SourceMediaPath )
v26 = v40 + 0x4524B8338B5D1E6Ci64;
if( !v26 )
goto LABEL_49;
}
if( v41 != 2 )
goto LABEL_6;
v28 = v39 - DEVPKEY_WIA_DeviceType;
if( v39 == DEVPKEY_WIA_DeviceType )
v28 = v40 - 0x2F09E22B0008C7BEi64;
if( v28 )
LABEL_6:
v13 = 0;
else
LABEL_49:
v13 = 1;
if( !PiAuDoesClientHaveAccess(v13 != 0 ? 64 : 2) )
{
v9 = -1073741790;
goto LABEL_20;
}
if( !v12 || HIDWORD(result) || !IoctlOutputBuffer || (v14 = 8, v8 < 8) )
{
v9 = -1073741811;
goto LABEL_20;
}
v15 = 0;
if( v10 > 6 )
{
v18 = v10 - 65537;
if( v18 )
{
v19 = v18 - 1;
if( v19 )
{
v20 = v19 - 1;
if( v20 )
{
v21 = v20 - 1;
if( v21 )
{
if( v21 != 1 )
goto LABEL_29;
v14 = 11;
}
else
{
v14 = 10;
}
}
else
{
v14 = 9;
}
}
}
else
{
v14 = 7;
}
v15 = PiDrvDbCtx != 0 ? v14 : 0;
}
else
{
if( v10 == 6 )
{
v15 = 6;
goto LABEL_16;
}
v16 = v10 - 1;
if( !v16 )
{
v15 = 1;
goto LABEL_16;
}
v23 = v16 - 1;
if( !v23 )
{
v15 = 2;
goto LABEL_16;
}
v24 = v23 - 1;
if( !v24 )
{
v15 = 4;
goto LABEL_16;
}
v25 = v24 - 1;
if( !v25 )
{
v15 = 3;
goto LABEL_16;
}
if( v25 == 1 )
{
v15 = 5;
goto LABEL_16;
}
}
LABEL_29:
if( !v15 )
v9 = -1073741811;
LABEL_16:
if( v9 >= 0 )
{
LODWORD(v32) = 0;
LODWORD(v31) = v33;
LODWORD(v30) = v11;
v9 = PiPnpRtlSetObjectProperty(
PiPnpRtlCtx,
v12,
v15,
0i64,
0i64,
(INT64)&v39,
v30,
*(WCHAR **)&DestinationString.Length,
v31,
v32);
if( v9 == -1073741790 )
{
if( v41 != 38 )
goto LABEL_20;
v29 = v39 - *(_QWORD *)&DEVPKEY_Device_BaseContainerId.fmtid.Data1;
if( v39 == *(_QWORD *)&DEVPKEY_Device_BaseContainerId.fmtid.Data1 )
v29 = v40 - *(_QWORD *)DEVPKEY_Device_BaseContainerId.fmtid.Data4;
if( v29 )
goto LABEL_20;
v9 = -1073741264;
}
if( v9 >= 0 && v15 == 1 )
{
DestinationString = 0i64;
if( (int)RtlInitUnicodeStringEx(&DestinationString, v12) >= 0 )
PnpSetDeviceInstancePropertyChangeEventFromDeviceInstance(&DestinationString);
}
}
LABEL_20:
v9 = PiCMReturnBasicResultData((unsigned int)v9, (unsigned int)ExpectedOutputSize, IoctlOutputBuffer, v8, v35);
}
PiCMReleasePropertyInputData((INT64)&result);
return v9;
}Referenced by:
No references.