* autoload.cc (LoadFuncEx): Define via new LoadFuncEx2 macro.
(LoadFuncEx2): Adapted from LoadFuncEx. Provides control of return value for nonexistent function. (NtQueryObject): Declare. (IsDebuggerPresent): Declare via LoadFuncEx2 and always return true if not available. * debug.h (being_debugged): Just rely on IsDebuggerPresent return value. * dtable.cc (handle_to_fn): New function. (dtable::init_std_file_from_handle): Attempt to derive std handle's name via handle_to_fn. (dtable::build_fhandler_from_name): Fill in what we can in path_conv structure when given a handle and path doesn't exist. * fhandler.cc (fhandler_base::open): Don't set the file pointer here. Use pc->exists () to determine if file exists rather than calling GetFileAttributes again. * fhandler.h (fhandler_base::exec_state_isknown): New method. (fhandler_base::fstat_helper): Add extra arguments to declaration. (fhandler_base::fstat_by_handle): Declare new method. (fhandler_base::fstat_by_name): Declare new method. * fhandler_disk_file (num_entries): Make __stdcall. (fhandler_base::fstat_by_handle): Define new method. (fhandler_base::fstat_by_name): Define new method. (fhandler_base:fstat): Call fstat_by_{handle,name} as appropriate. (fhandler_disk_file::fstat_helper): Accept extra arguments for filling out stat structure. Move handle or name specific stuff to new methods above. (fhandler_disk_file::open): Use real_path->exists rather than calling GetFileAttributes again. * ntdll.h (FILE_NAME_INFORMATION): Define new structure. (OBJECT_INFORMATION_CLASS): Partially define new enum. (OBJECT_NAME_INFORMATION): Define new structure. (NtQueryInformationFile): New declaration. (NtQueryObject): New declaration. * path.cc (path_conv::fillin): Define new method. * path.h (path_conv::fillin): Declare new method. (path_conv::drive_thpe): Rename from 'get_drive_type'. (path_conv::volser): Declare new method. (path_conv::volname): Declare new method. (path_conv::root_dir): Declare new method. * syscalls.cc (fstat64): Send real path_conv to fstat as second argument.
This commit is contained in:
@ -72,9 +72,10 @@ details. */
|
||||
/* Standard DLL load macro. Invokes a fatal warning if the function isn't
|
||||
found. */
|
||||
#define LoadDLLfunc(name, n, dllname) LoadDLLfuncEx (name, n, dllname, 0)
|
||||
#define LoadDLLfuncEx(name, n, dllname, notimp) LoadDLLfuncEx2(name, n, dllname, notimp, 0)
|
||||
|
||||
/* Main DLL setup stuff. */
|
||||
#define LoadDLLfuncEx(name, n, dllname, notimp) \
|
||||
#define LoadDLLfuncEx2(name, n, dllname, notimp, err) \
|
||||
LoadDLLprime (dllname, dll_func_load) \
|
||||
__asm__ (" \n\
|
||||
.section ." #dllname "_text,\"wx\" \n\
|
||||
@ -86,7 +87,7 @@ _win32_" mangle (name, n) ": \n\
|
||||
movl (1f),%eax \n\
|
||||
call *(%eax) \n\
|
||||
1:.long ." #dllname "_info \n\
|
||||
.long " #n "+" #notimp " \n\
|
||||
.long (" #n "+" #notimp ") | " #err "<<16 \n\
|
||||
.asciz \"" #name "\" \n\
|
||||
.text \n\
|
||||
");
|
||||
@ -121,11 +122,14 @@ noload: \n\
|
||||
jz 1f # Nope. \n\
|
||||
decl %eax # Yes. This is the # of bytes + 1 \n\
|
||||
popl %edx # Caller's caller \n\
|
||||
pushl %eax # Save for later \n\
|
||||
xorl $0xffff,%eax # Only want lower word \n\
|
||||
addl %eax,%esp # Pop off bytes \n\
|
||||
movl $127,%eax # ERROR_PROC_NOT_FOUND \n\
|
||||
pushl %eax # First argument \n\
|
||||
call _SetLastError@4 # Set it \n\
|
||||
xor %eax,%eax # Zero functional return \n\
|
||||
popl %eax # Get back argument \n\
|
||||
shrl $16,%eax # return value in high order word \n\
|
||||
jmp *%edx # Return \n\
|
||||
1: \n\
|
||||
movl (%edx),%eax # Handle value \n\
|
||||
@ -373,6 +377,8 @@ LoadDLLfunc (NetUserGetGroups, 28, netapi32)
|
||||
LoadDLLfunc (NetUserGetInfo, 16, netapi32)
|
||||
LoadDLLfunc (NetWkstaUserGetInfo, 12, netapi32)
|
||||
|
||||
LoadDLLfuncEx (NtQueryInformationFile, 20, ntdll, 1)
|
||||
LoadDLLfuncEx2 (NtQueryObject, 20, ntdll, 1, 1)
|
||||
LoadDLLfuncEx (NtCreateToken, 52, ntdll, 1)
|
||||
LoadDLLfuncEx (NtMapViewOfSection, 40, ntdll, 1)
|
||||
LoadDLLfuncEx (NtOpenFile, 24, ntdll, 1)
|
||||
@ -483,7 +489,7 @@ LoadDLLfunc (CoCreateInstance, 20, ole32)
|
||||
LoadDLLfuncEx (CancelIo, 4, kernel32, 1)
|
||||
LoadDLLfuncEx (CreateHardLinkA, 12, kernel32, 1)
|
||||
LoadDLLfuncEx (CreateToolhelp32Snapshot, 8, kernel32, 1)
|
||||
LoadDLLfuncEx (IsDebuggerPresent, 0, kernel32, 1)
|
||||
LoadDLLfuncEx2 (IsDebuggerPresent, 0, kernel32, 1, 1)
|
||||
LoadDLLfuncEx (Process32First, 8, kernel32, 1)
|
||||
LoadDLLfuncEx (Process32Next, 8, kernel32, 1)
|
||||
LoadDLLfuncEx (SignalObjectAndWait, 16, kernel32, 1)
|
||||
|
Reference in New Issue
Block a user