kernel32: Use set_ntstatus() in more places.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
feature/deterministic
Alexandre Julliard 2020-05-26 12:29:06 +02:00
parent 6133890590
commit e076fff578
7 changed files with 52 additions and 170 deletions

View File

@ -1252,12 +1252,7 @@ BOOL WINAPI WriteConsoleW(HANDLE hConsoleOutput, LPCVOID lpBuffer, DWORD nNumber
FIXME("Conversion not supported yet\n"); FIXME("Conversion not supported yet\n");
} }
HeapFree(GetProcessHeap(), 0, ptr); HeapFree(GetProcessHeap(), 0, ptr);
if (status != STATUS_SUCCESS) return set_ntstatus( status );
{
SetLastError(RtlNtStatusToDosError(status));
return FALSE;
}
return TRUE;
} }
if (!GetConsoleMode(hConsoleOutput, &mode) || !GetConsoleScreenBufferInfo(hConsoleOutput, &csbi)) if (!GetConsoleMode(hConsoleOutput, &mode) || !GetConsoleScreenBufferInfo(hConsoleOutput, &csbi))

View File

@ -150,13 +150,7 @@ void WINAPI DECLSPEC_HOTPATCH OutputDebugStringA( LPCSTR str )
*/ */
BOOL WINAPI DebugBreakProcess(HANDLE process) BOOL WINAPI DebugBreakProcess(HANDLE process)
{ {
NTSTATUS status; return set_ntstatus( DbgUiIssueRemoteBreakin( process ));
TRACE("(%p)\n", process);
status = DbgUiIssueRemoteBreakin(process);
if (status) SetLastError(RtlNtStatusToDosError(status));
return !status;
} }

View File

@ -336,13 +336,10 @@ BOOL WINAPI SetFileCompletionNotificationModes( HANDLE file, UCHAR flags )
{ {
FILE_IO_COMPLETION_NOTIFICATION_INFORMATION info; FILE_IO_COMPLETION_NOTIFICATION_INFORMATION info;
IO_STATUS_BLOCK io; IO_STATUS_BLOCK io;
NTSTATUS status;
info.Flags = flags; info.Flags = flags;
status = NtSetInformationFile( file, &io, &info, sizeof(info), FileIoCompletionNotificationInformation ); return set_ntstatus( NtSetInformationFile( file, &io, &info, sizeof(info),
if (status == STATUS_SUCCESS) return TRUE; FileIoCompletionNotificationInformation ));
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
} }
@ -534,8 +531,7 @@ BOOL WINAPI DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode,
lpvOutBuffer, cbOutBuffer); lpvOutBuffer, cbOutBuffer);
if (lpcbBytesReturned) *lpcbBytesReturned = iosb.Information; if (lpcbBytesReturned) *lpcbBytesReturned = iosb.Information;
} }
if (status) SetLastError( RtlNtStatusToDosError(status) ); return set_ntstatus( status );
return !status;
} }

View File

@ -26,6 +26,7 @@
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
#include "winternl.h" #include "winternl.h"
#include "kernel_private.h"
#include "wine/debug.h" #include "wine/debug.h"
#include "wine/heap.h" #include "wine/heap.h"
@ -173,9 +174,8 @@ HANDLE WINAPI PowerCreateRequest(REASON_CONTEXT *context)
status = NtCreatePowerRequest( &handle, &nt_context ); status = NtCreatePowerRequest( &handle, &nt_context );
if (nt_context.Flags & POWER_REQUEST_CONTEXT_DETAILED_STRING) if (nt_context.Flags & POWER_REQUEST_CONTEXT_DETAILED_STRING)
heap_free( nt_context.u.s.ReasonStrings ); heap_free( nt_context.u.s.ReasonStrings );
if (status) if (!set_ntstatus( status )) return INVALID_HANDLE_VALUE;
SetLastError( RtlNtStatusToDosError(status) ); return handle;
return status == STATUS_SUCCESS ? handle : INVALID_HANDLE_VALUE;
} }
/*********************************************************************** /***********************************************************************
@ -183,10 +183,7 @@ HANDLE WINAPI PowerCreateRequest(REASON_CONTEXT *context)
*/ */
BOOL WINAPI PowerSetRequest(HANDLE request, POWER_REQUEST_TYPE type) BOOL WINAPI PowerSetRequest(HANDLE request, POWER_REQUEST_TYPE type)
{ {
NTSTATUS status = NtSetPowerRequest( request, type ); return set_ntstatus( NtSetPowerRequest( request, type ));
if (status)
SetLastError( RtlNtStatusToDosError(status) );
return status == STATUS_SUCCESS;
} }
/*********************************************************************** /***********************************************************************
@ -194,8 +191,5 @@ BOOL WINAPI PowerSetRequest(HANDLE request, POWER_REQUEST_TYPE type)
*/ */
BOOL WINAPI PowerClearRequest(HANDLE request, POWER_REQUEST_TYPE type) BOOL WINAPI PowerClearRequest(HANDLE request, POWER_REQUEST_TYPE type)
{ {
NTSTATUS status = NtClearPowerRequest( request, type ); return set_ntstatus( NtClearPowerRequest( request, type ));
if (status)
SetLastError( RtlNtStatusToDosError(status) );
return status == STATUS_SUCCESS;
} }

View File

@ -103,41 +103,21 @@ static HANDLE normalize_handle_if_console(HANDLE handle)
/*********************************************************************** /***********************************************************************
* RegisterWaitForSingleObject (KERNEL32.@) * RegisterWaitForSingleObject (KERNEL32.@)
*/ */
BOOL WINAPI RegisterWaitForSingleObject(PHANDLE phNewWaitObject, HANDLE hObject, BOOL WINAPI RegisterWaitForSingleObject( HANDLE *wait, HANDLE object, WAITORTIMERCALLBACK callback,
WAITORTIMERCALLBACK Callback, PVOID Context, void *context, ULONG timeout, ULONG flags )
ULONG dwMilliseconds, ULONG dwFlags)
{ {
NTSTATUS status; TRACE( "%p %p %p %p %d %d\n", wait, object, callback, context, timeout, flags );
TRACE("%p %p %p %p %d %d\n", object = normalize_handle_if_console( object );
phNewWaitObject,hObject,Callback,Context,dwMilliseconds,dwFlags); return set_ntstatus( RtlRegisterWait( wait, object, callback, context, timeout, flags ));
hObject = normalize_handle_if_console(hObject);
status = RtlRegisterWait( phNewWaitObject, hObject, Callback, Context, dwMilliseconds, dwFlags );
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
} }
/*********************************************************************** /***********************************************************************
* UnregisterWait (KERNEL32.@) * UnregisterWait (KERNEL32.@)
*/ */
BOOL WINAPI UnregisterWait( HANDLE WaitHandle ) BOOL WINAPI UnregisterWait( HANDLE handle )
{ {
NTSTATUS status; return set_ntstatus( RtlDeregisterWait( handle ));
TRACE("%p\n",WaitHandle);
status = RtlDeregisterWait( WaitHandle );
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
} }
/*********************************************************************** /***********************************************************************
@ -310,16 +290,10 @@ HANDLE WINAPI OpenJobObjectW( DWORD access, BOOL inherit, LPCWSTR name )
HANDLE ret; HANDLE ret;
UNICODE_STRING nameW; UNICODE_STRING nameW;
OBJECT_ATTRIBUTES attr; OBJECT_ATTRIBUTES attr;
NTSTATUS status;
if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0; if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
status = NtOpenJobObject( &ret, access, &attr ); if (!set_ntstatus( NtOpenJobObject( &ret, access, &attr ))) return 0;
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return 0;
}
return ret; return ret;
} }
@ -345,9 +319,7 @@ HANDLE WINAPI OpenJobObjectA( DWORD access, BOOL inherit, LPCSTR name )
*/ */
BOOL WINAPI TerminateJobObject( HANDLE job, UINT exit_code ) BOOL WINAPI TerminateJobObject( HANDLE job, UINT exit_code )
{ {
NTSTATUS status = NtTerminateJobObject( job, exit_code ); return set_ntstatus( NtTerminateJobObject( job, exit_code ));
if (status) SetLastError( RtlNtStatusToDosError(status) );
return !status;
} }
/****************************************************************************** /******************************************************************************
@ -356,9 +328,7 @@ BOOL WINAPI TerminateJobObject( HANDLE job, UINT exit_code )
BOOL WINAPI QueryInformationJobObject( HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, BOOL WINAPI QueryInformationJobObject( HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info,
DWORD len, DWORD *ret_len ) DWORD len, DWORD *ret_len )
{ {
NTSTATUS status = NtQueryInformationJobObject( job, class, info, len, ret_len ); return set_ntstatus( NtQueryInformationJobObject( job, class, info, len, ret_len ));
if (status) SetLastError( RtlNtStatusToDosError(status) );
return !status;
} }
/****************************************************************************** /******************************************************************************
@ -366,9 +336,7 @@ BOOL WINAPI QueryInformationJobObject( HANDLE job, JOBOBJECTINFOCLASS class, LPV
*/ */
BOOL WINAPI SetInformationJobObject( HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, DWORD len ) BOOL WINAPI SetInformationJobObject( HANDLE job, JOBOBJECTINFOCLASS class, LPVOID info, DWORD len )
{ {
NTSTATUS status = NtSetInformationJobObject( job, class, info, len ); return set_ntstatus( NtSetInformationJobObject( job, class, info, len ));
if (status) SetLastError( RtlNtStatusToDosError(status) );
return !status;
} }
/****************************************************************************** /******************************************************************************
@ -376,9 +344,7 @@ BOOL WINAPI SetInformationJobObject( HANDLE job, JOBOBJECTINFOCLASS class, LPVOI
*/ */
BOOL WINAPI AssignProcessToJobObject( HANDLE job, HANDLE process ) BOOL WINAPI AssignProcessToJobObject( HANDLE job, HANDLE process )
{ {
NTSTATUS status = NtAssignProcessToJobObject( job, process ); return set_ntstatus( NtAssignProcessToJobObject( job, process ));
if (status) SetLastError( RtlNtStatusToDosError(status) );
return !status;
} }
@ -545,18 +511,10 @@ BOOL WINAPI WaitNamedPipeA (LPCSTR name, DWORD nTimeOut)
BOOL WINAPI GetNamedPipeClientProcessId( HANDLE pipe, ULONG *id ) BOOL WINAPI GetNamedPipeClientProcessId( HANDLE pipe, ULONG *id )
{ {
IO_STATUS_BLOCK iosb; IO_STATUS_BLOCK iosb;
NTSTATUS status;
TRACE( "%p %p\n", pipe, id ); return set_ntstatus( NtFsControlFile( pipe, NULL, NULL, NULL, &iosb,
FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE, (void *)"ClientProcessId",
status = NtFsControlFile( pipe, NULL, NULL, NULL, &iosb, FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE, sizeof("ClientProcessId"), id, sizeof(*id) ));
(void *)"ClientProcessId", sizeof("ClientProcessId"), id, sizeof(*id) );
if (status)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
} }
/*********************************************************************** /***********************************************************************
@ -565,18 +523,10 @@ BOOL WINAPI GetNamedPipeClientProcessId( HANDLE pipe, ULONG *id )
BOOL WINAPI GetNamedPipeServerProcessId( HANDLE pipe, ULONG *id ) BOOL WINAPI GetNamedPipeServerProcessId( HANDLE pipe, ULONG *id )
{ {
IO_STATUS_BLOCK iosb; IO_STATUS_BLOCK iosb;
NTSTATUS status;
TRACE( "%p, %p\n", pipe, id ); return set_ntstatus( NtFsControlFile( pipe, NULL, NULL, NULL, &iosb,
FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE, (void *)"ServerProcessId",
status = NtFsControlFile( pipe, NULL, NULL, NULL, &iosb, FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE, sizeof("ServerProcessId"), id, sizeof(*id) ));
(void *)"ServerProcessId", sizeof("ServerProcessId"), id, sizeof(*id) );
if (status)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
} }
/*********************************************************************** /***********************************************************************
@ -712,7 +662,6 @@ HANDLE WINAPI CreateMailslotW( LPCWSTR lpName, DWORD nMaxMessageSize,
UNICODE_STRING nameW; UNICODE_STRING nameW;
LARGE_INTEGER timeout; LARGE_INTEGER timeout;
IO_STATUS_BLOCK iosb; IO_STATUS_BLOCK iosb;
NTSTATUS status;
TRACE("%s %d %d %p\n", debugstr_w(lpName), TRACE("%s %d %d %p\n", debugstr_w(lpName),
nMaxMessageSize, lReadTimeout, sa); nMaxMessageSize, lReadTimeout, sa);
@ -742,13 +691,9 @@ HANDLE WINAPI CreateMailslotW( LPCWSTR lpName, DWORD nMaxMessageSize,
else else
timeout.QuadPart = ((LONGLONG)0x7fffffff << 32) | 0xffffffff; timeout.QuadPart = ((LONGLONG)0x7fffffff << 32) | 0xffffffff;
status = NtCreateMailslotFile( &handle, GENERIC_READ | SYNCHRONIZE, &attr, if (!set_ntstatus( NtCreateMailslotFile( &handle, GENERIC_READ | SYNCHRONIZE, &attr,
&iosb, 0, 0, nMaxMessageSize, &timeout ); &iosb, 0, 0, nMaxMessageSize, &timeout )))
if (status)
{
SetLastError( RtlNtStatusToDosError(status) );
handle = INVALID_HANDLE_VALUE; handle = INVALID_HANDLE_VALUE;
}
RtlFreeUnicodeString( &nameW ); RtlFreeUnicodeString( &nameW );
return handle; return handle;
@ -777,19 +722,13 @@ BOOL WINAPI GetMailslotInfo( HANDLE hMailslot, LPDWORD lpMaxMessageSize,
{ {
FILE_MAILSLOT_QUERY_INFORMATION info; FILE_MAILSLOT_QUERY_INFORMATION info;
IO_STATUS_BLOCK iosb; IO_STATUS_BLOCK iosb;
NTSTATUS status;
TRACE("%p %p %p %p %p\n",hMailslot, lpMaxMessageSize, TRACE("%p %p %p %p %p\n",hMailslot, lpMaxMessageSize,
lpNextSize, lpMessageCount, lpReadTimeout); lpNextSize, lpMessageCount, lpReadTimeout);
status = NtQueryInformationFile( hMailslot, &iosb, &info, sizeof info, if (!set_ntstatus( NtQueryInformationFile( hMailslot, &iosb, &info, sizeof info,
FileMailslotQueryInformation ); FileMailslotQueryInformation )))
if( status != STATUS_SUCCESS )
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE; return FALSE;
}
if( lpMaxMessageSize ) if( lpMaxMessageSize )
*lpMaxMessageSize = info.MaximumMessageSize; *lpMaxMessageSize = info.MaximumMessageSize;
@ -825,7 +764,6 @@ BOOL WINAPI SetMailslotInfo( HANDLE hMailslot, DWORD dwReadTimeout)
{ {
FILE_MAILSLOT_SET_INFORMATION info; FILE_MAILSLOT_SET_INFORMATION info;
IO_STATUS_BLOCK iosb; IO_STATUS_BLOCK iosb;
NTSTATUS status;
TRACE("%p %d\n", hMailslot, dwReadTimeout); TRACE("%p %d\n", hMailslot, dwReadTimeout);
@ -833,30 +771,17 @@ BOOL WINAPI SetMailslotInfo( HANDLE hMailslot, DWORD dwReadTimeout)
info.ReadTimeout.QuadPart = (ULONGLONG)dwReadTimeout * -10000; info.ReadTimeout.QuadPart = (ULONGLONG)dwReadTimeout * -10000;
else else
info.ReadTimeout.QuadPart = ((LONGLONG)0x7fffffff << 32) | 0xffffffff; info.ReadTimeout.QuadPart = ((LONGLONG)0x7fffffff << 32) | 0xffffffff;
status = NtSetInformationFile( hMailslot, &iosb, &info, sizeof info, return set_ntstatus( NtSetInformationFile( hMailslot, &iosb, &info, sizeof info,
FileMailslotSetInformation ); FileMailslotSetInformation ));
if( status != STATUS_SUCCESS )
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
} }
/****************************************************************************** /******************************************************************************
* BindIoCompletionCallback (KERNEL32.@) * BindIoCompletionCallback (KERNEL32.@)
*/ */
BOOL WINAPI BindIoCompletionCallback( HANDLE FileHandle, LPOVERLAPPED_COMPLETION_ROUTINE Function, ULONG Flags) BOOL WINAPI BindIoCompletionCallback( HANDLE handle, LPOVERLAPPED_COMPLETION_ROUTINE func, ULONG flags )
{ {
NTSTATUS status; return set_ntstatus( RtlSetIoCompletionCallback( handle, (PRTL_OVERLAPPED_COMPLETION_ROUTINE)func, flags ));
TRACE("(%p, %p, %d)\n", FileHandle, Function, Flags);
status = RtlSetIoCompletionCallback( FileHandle, (PRTL_OVERLAPPED_COMPLETION_ROUTINE)Function, Flags );
if (status == STATUS_SUCCESS) return TRUE;
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
} }

View File

@ -50,14 +50,12 @@ void WINAPI FreeLibraryAndExitThread(HINSTANCE hLibModule, DWORD dwExitCode)
BOOL WINAPI Wow64SetThreadContext( HANDLE handle, const WOW64_CONTEXT *context) BOOL WINAPI Wow64SetThreadContext( HANDLE handle, const WOW64_CONTEXT *context)
{ {
#ifdef __i386__ #ifdef __i386__
NTSTATUS status = NtSetContextThread( handle, (const CONTEXT *)context ); return set_ntstatus( NtSetContextThread( handle, (const CONTEXT *)context ));
#elif defined(__x86_64__) #elif defined(__x86_64__)
NTSTATUS status = RtlWow64SetThreadContext( handle, context ); return set_ntstatus( RtlWow64SetThreadContext( handle, context ));
#else #else
NTSTATUS status = STATUS_NOT_IMPLEMENTED; return set_ntstatus( STATUS_NOT_IMPLEMENTED );
#endif #endif
if (status) SetLastError( RtlNtStatusToDosError(status) );
return !status;
} }
/*********************************************************************** /***********************************************************************
@ -66,40 +64,26 @@ BOOL WINAPI Wow64SetThreadContext( HANDLE handle, const WOW64_CONTEXT *context)
BOOL WINAPI Wow64GetThreadContext( HANDLE handle, WOW64_CONTEXT *context) BOOL WINAPI Wow64GetThreadContext( HANDLE handle, WOW64_CONTEXT *context)
{ {
#ifdef __i386__ #ifdef __i386__
NTSTATUS status = NtGetContextThread( handle, (CONTEXT *)context ); return set_ntstatus( NtGetContextThread( handle, (CONTEXT *)context ));
#elif defined(__x86_64__) #elif defined(__x86_64__)
NTSTATUS status = RtlWow64GetThreadContext( handle, context ); return set_ntstatus( RtlWow64GetThreadContext( handle, context ));
#else #else
NTSTATUS status = STATUS_NOT_IMPLEMENTED; return set_ntstatus( STATUS_NOT_IMPLEMENTED );
#endif #endif
if (status) SetLastError( RtlNtStatusToDosError(status) );
return !status;
} }
/********************************************************************** /**********************************************************************
* SetThreadAffinityMask (KERNEL32.@) * SetThreadAffinityMask (KERNEL32.@)
*/ */
DWORD_PTR WINAPI SetThreadAffinityMask( HANDLE hThread, DWORD_PTR dwThreadAffinityMask ) DWORD_PTR WINAPI SetThreadAffinityMask( HANDLE thread, DWORD_PTR mask )
{ {
NTSTATUS status; THREAD_BASIC_INFORMATION tbi;
THREAD_BASIC_INFORMATION tbi;
status = NtQueryInformationThread( hThread, ThreadBasicInformation, if (!set_ntstatus( NtQueryInformationThread( thread, ThreadBasicInformation, &tbi, sizeof(tbi), NULL )))
&tbi, sizeof(tbi), NULL );
if (status)
{
SetLastError( RtlNtStatusToDosError(status) );
return 0; return 0;
} if (!set_ntstatus( NtSetInformationThread( thread, ThreadAffinityMask, &mask, sizeof(mask))))
status = NtSetInformationThread( hThread, ThreadAffinityMask,
&dwThreadAffinityMask,
sizeof(dwThreadAffinityMask));
if (status)
{
SetLastError( RtlNtStatusToDosError(status) );
return 0; return 0;
}
return tbi.AffinityMask; return tbi.AffinityMask;
} }
@ -107,18 +91,14 @@ DWORD_PTR WINAPI SetThreadAffinityMask( HANDLE hThread, DWORD_PTR dwThreadAffini
/*********************************************************************** /***********************************************************************
* GetThreadSelectorEntry (KERNEL32.@) * GetThreadSelectorEntry (KERNEL32.@)
*/ */
BOOL WINAPI GetThreadSelectorEntry( HANDLE hthread, DWORD sel, LPLDT_ENTRY ldtent ) BOOL WINAPI GetThreadSelectorEntry( HANDLE thread, DWORD sel, LDT_ENTRY *ldtent )
{ {
THREAD_DESCRIPTOR_INFORMATION tdi; THREAD_DESCRIPTOR_INFORMATION tdi;
NTSTATUS status;
tdi.Selector = sel; tdi.Selector = sel;
status = NtQueryInformationThread( hthread, ThreadDescriptorTableEntry, &tdi, sizeof(tdi), NULL); if (!set_ntstatus( NtQueryInformationThread( thread, ThreadDescriptorTableEntry,
if (status) &tdi, sizeof(tdi), NULL )))
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE; return FALSE;
}
*ldtent = tdi.Entry; *ldtent = tdi.Entry;
return TRUE; return TRUE;
} }

View File

@ -38,6 +38,7 @@
#include "winnls.h" #include "winnls.h"
#include "winternl.h" #include "winternl.h"
#include "kernel_private.h"
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(toolhelp); WINE_DEFAULT_DEBUG_CHANNEL(toolhelp);
@ -78,7 +79,6 @@ static BOOL fetch_module( DWORD process, DWORD flags, LDR_DATA_TABLE_ENTRY **ldr
HANDLE hProcess; HANDLE hProcess;
PROCESS_BASIC_INFORMATION pbi; PROCESS_BASIC_INFORMATION pbi;
PPEB_LDR_DATA pLdrData; PPEB_LDR_DATA pLdrData;
NTSTATUS status;
PLIST_ENTRY head, curr; PLIST_ENTRY head, curr;
BOOL ret = FALSE; BOOL ret = FALSE;
@ -94,9 +94,8 @@ static BOOL fetch_module( DWORD process, DWORD flags, LDR_DATA_TABLE_ENTRY **ldr
else else
hProcess = GetCurrentProcess(); hProcess = GetCurrentProcess();
status = NtQueryInformationProcess( hProcess, ProcessBasicInformation, if (set_ntstatus( NtQueryInformationProcess( hProcess, ProcessBasicInformation,
&pbi, sizeof(pbi), NULL ); &pbi, sizeof(pbi), NULL )))
if (!status)
{ {
if (ReadProcessMemory( hProcess, &pbi.PebBaseAddress->LdrData, if (ReadProcessMemory( hProcess, &pbi.PebBaseAddress->LdrData,
&pLdrData, sizeof(pLdrData), NULL ) && &pLdrData, sizeof(pLdrData), NULL ) &&
@ -133,7 +132,6 @@ static BOOL fetch_module( DWORD process, DWORD flags, LDR_DATA_TABLE_ENTRY **ldr
ret = TRUE; ret = TRUE;
} }
} }
else SetLastError( RtlNtStatusToDosError( status ) );
if (process) CloseHandle( hProcess ); if (process) CloseHandle( hProcess );
return ret; return ret;