PiCMCreateObject
NTSTATUS __stdcall PiCMCreateObject(
VOID *IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
VOID *IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
unsigned int v5;
NTSTATUS Object;
int v8;
__int64 v9;
unsigned int v10;
INT64 v12;
INT64 v13;
INT64 v14;
_CMAPI_INPUT_OBJECT_DATA ObjectData[4];
__int128 v16;
UINT64 ExpectedOutputSize;
UINT64 *v18;
v5 = IoctlOutputBufferSize;
*(_DWORD *)v18 = 0;
*(_OWORD *)ObjectData = 0i64;
v16 = 0i64;
ExpectedOutputSize = 0i64;
Object = PiCMCaptureObjectInputData(
IoctlInputBuffer,
IoctlInputBufferSize,
(_CMAPI_INPUT_OBJECT_DATA *)(unsigned int)BytesUsed);
if( Object >= 0 )
{
if( !PiAuDoesClientHaveAccess(2ui64) )
{
Object = -1073741790;
LABEL_39:
Object = PiCMReturnBasicResultData(
(unsigned int)Object,
(unsigned int)ExpectedOutputSize,
IoctlOutputBuffer,
v5,
v18,
v12,
v13,
v14);
goto LABEL_40;
}
if( !(_QWORD)v16 )
goto LABEL_38;
if( ObjectData[1] )
goto LABEL_38;
if( HIDWORD(v16) )
goto LABEL_38;
if( !IoctlOutputBuffer )
goto LABEL_38;
v8 = 8;
if( v5 < 8 )
goto LABEL_38;
v9 = (unsigned int)ObjectData[2];
v10 = 0;
if( ObjectData[2] <= 6 )
{
if( ObjectData[2] == 6 )
{
v10 = 6;
goto LABEL_35;
}
v9 = (unsigned int)(ObjectData[2] - 1);
if( ObjectData[2] == 1 )
{
v10 = 1;
goto LABEL_35;
}
v9 = (unsigned int)(ObjectData[2] - 2);
if( ObjectData[2] == 2 )
{
v10 = 2;
goto LABEL_36;
}
v9 = (unsigned int)(ObjectData[2] - 3);
if( ObjectData[2] == 3 )
{
v10 = 4;
goto LABEL_36;
}
v9 = (unsigned int)(ObjectData[2] - 4);
if( ObjectData[2] == 4 )
{
v10 = 3;
goto LABEL_35;
}
if( ObjectData[2] == 5 )
{
v10 = 5;
goto LABEL_35;
}
goto LABEL_32;
}
v9 = (unsigned int)(ObjectData[2] - 65537);
if( ObjectData[2] == 65537 )
{
v8 = 7;
}
else
{
v9 = (unsigned int)(ObjectData[2] - 65538);
if( ObjectData[2] != 65538 )
{
v9 = (unsigned int)(ObjectData[2] - 65539);
if( ObjectData[2] == 65539 )
{
v8 = 9;
}
else
{
v9 = (unsigned int)(ObjectData[2] - 65540);
if( ObjectData[2] == 65540 )
{
v8 = 10;
}
else
{
if( ObjectData[2] != 65541 )
goto LABEL_32;
v8 = 11;
}
}
}
}
v10 = *(&stru_140CF2E80 + 608) != 0i64 ? v8 : 0;
LABEL_32:
if( v10 )
{
if( v10 <= 4 || v10 > 6 )
{
LABEL_36:
if( Object >= 0 )
Object = PnpCreateObject(v9, v16, v10, 0, 0i64);
goto LABEL_39;
}
LABEL_35:
Object = -1073741637;
goto LABEL_36;
}
LABEL_38:
Object = -1073741811;
goto LABEL_39;
}
LABEL_40:
PiCMReleaseObjectInputData(ObjectData);
return Object;
}Referenced by:
PiCMHandleIoctl