ring3 hook ntdll!NtCreateSection,为什么获取的ObjectAttributes经常无效
NTSTATUS __stdcall Fake_NtCreateSection(
OUT PHANDLE SectionHandle,
IN ULONG DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER MaximumSize OPTIONAL,
IN ULONG PageAttributes,
IN ULONG SectionAttributes,
IN HANDLE FileHandle OPTIONAL)
{
NTSTATUS status;
status = NtCreateSection(SectionHandle,DesiredAccess,ObjectAttributes,MaximumSize,PageAttributes,SectionAttributes,FileHandle);
if (STATUS_SUCCESS != status)
{
return status;
}
if (SectionHandle == NULL)
{
return STATUS_ACCESS_VIOLATION;
}
WCHAR szFilePath[MAX_NAME] = {0};
GetPath(ObjectAttributes,szFilePath);
DbgPrint("%s: [%s] Enter! %S \n",__MYNAME__,__FUNCTION__,szFilePath);
return status;
}
status = NtQueryObject(ObjectHandle, ObjectNameInformation, pNameInfo, 0x200, &uResultLength);
if (STATUS_INFO_LENGTH_MISMATCH == status ||
STATUS_BUFFER_OVERFLOW == status ||
STATUS_BUFFER_TOO_SMALL == status)
{
pNameInfo = (POBJECT_NAME_INFORMATION)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pNameInfo, 0x100);
continue;
}
else if (STATUS_SUCCESS == status)
{
lstrcpyW(strFullPath,pNameInfo->Name.Buffer);
break;
}
else
{
break;
}
}
if (NULL != pNameInfo )
{
HeapFree(GetProcessHeap(),0,pNameInfo);
pNameInfo = NULL;
}
return status;
}