NtQueryAttributesFile
NTSTATUS __stdcall NtQueryAttributesFile(
_OBJECT_ATTRIBUTES *ObjectAttributes,
_FILE_BASIC_INFORMATION *FileInformation){
char PreviousMode;
__int64 v5;
_ETHREAD *CurrentThread;
_LOOKASIDE_LIST_EX *v7;
int v8;
UINT64 DesiredAccess;
PVOID Handle;
__int128 ParseContext[14];
__int128 v13[3];
__int64 v14;
char v15[272];
memset(v15, 0i64, sizeof(v15));
Handle = 0i64;
PreviousMode = KeGetCurrentThread()->PreviousMode;
if( PreviousMode )
{
v5 = (__int64)FileInformation;
if( ((unsigned __int8)FileInformation & 7) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)FileInformation >= 0x7FFFFFFF0000i64 )
v5 = 0x7FFFFFFF0000i64;
*(_BYTE *)v5 = *(_BYTE *)v5;
*(_BYTE *)(v5 + 39) = *(_BYTE *)(v5 + 39);
}
memset(ParseContext, 0i64, 0xD8u);
memset(v13, 0, sizeof(v13));
v14 = 0i64;
LODWORD(ParseContext[0]) = 14155784;
WORD3(ParseContext[4]) = 7;
DWORD2(ParseContext[5]) = 1;
LODWORD(ParseContext[4]) = 2113536;
*(_QWORD *)&ParseContext[6] = FileInformation;
*((_QWORD *)&ParseContext[6] + 1) = v13;
BYTE9(ParseContext[8]) = 1;
*(_QWORD *)&ParseContext[9] = v15;
*(_QWORD *)&ParseContext[3] = ObjectAttributes;
DWORD2(ParseContext[9]) = 32;
memset(&ParseContext[10], 0, 40);
LOWORD(ParseContext[10]) = 40;
*(_QWORD *)&ParseContext[12] = PsGetCurrentSilo();
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
++CurrentThread->Tcb.OtherOperationCount;
__incgsdword(0x2EE4u);
LODWORD(DesiredAccess) = 128;
v8 = ObOpenObjectByNameEx(
ObjectAttributes,
(_OBJECT_TYPE *)IoFileObjectType,
PreviousMode,
0i64,
DesiredAccess,
ParseContext,
*(_EJOB **)&ParseContext[12],
&Handle);
if( *((_QWORD *)&ParseContext[10] + 1) && FsRtlpCleanupEcps(*((_ECP_LIST **)&ParseContext[10] + 1), v7) )
*((_QWORD *)&ParseContext[10] + 1) = 0i64;
if( LODWORD(ParseContext[2]) == -1096154543 )
return ParseContext[1];
if( v8 >= 0 )
{
ObCloseHandle(Handle, PreviousMode);
return -1073741788;
}
return v8;
}Referenced by:
No references.