IopRetrieveSystemDeviceName
NTSTATUS __stdcall IopRetrieveSystemDeviceName(
INT64 *QueryRoutine,
WCHAR *a2,
UINT64 a3,
UINT64 *a4,
VOID *UserBuffer,
INT64 BufferSize,
UINT64 *RequiredSize,
INT64 a8,
INT64 a9,
INT64 a10,
INT64 a11){
int v14;
__int64 v15;
unsigned int v16;
WCHAR *v17;
int v18;
NTSTATUS v19;
int v20;
int v22[14];
v14 = 0;
v22[0] = 0;
if( a2 && (unsigned int)a3 > 0x10 )
{
if( KeGetCurrentThread()->PreviousMode )
{
if( ((unsigned __int8)a2 & 7) != 0 )
ExRaiseDatatypeMisalignment();
v15 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)a2 < 0x7FFFFFFF0000i64 )
v15 = (__int64)a2;
*(_BYTE *)v15 = *(_BYTE *)v15;
*(_BYTE *)(v15 + 15) = *(_BYTE *)(v15 + 15);
}
v16 = a3 - 16;
v17 = a2 + 8;
}
else
{
v16 = 0;
v17 = 0i64;
}
if( v16 > 0xFFFF )
v16 = 0xFFFF;
v18 = ((__int64(__fastcall *)(WCHAR *, _QWORD, int *))QueryRoutine)(v17, v16, v22);
v19 = v18;
if( v18 < 0 )
{
if( v18 == -1073741789 )
{
*(_DWORD *)a4 = v22[0] + 16;
return v19;
}
}
else
{
v20 = v22[0];
*a2 = LOWORD(v22[0]) - 2;
a2[1] = v16;
*((_QWORD *)a2 + 1) = v17;
if( v19 >= 0 )
v14 = v20 + 16;
}
*(_DWORD *)a4 = v14;
return v19;
}Referenced by:
No references.