Re: PSAPI: stub implementations (#2)
Hans Leidekker wrote:
Call SetLastError() on failure, as suggested by Juan Lang.
-Hans
Changelog: Stub implementations for EnumPageFiles{A,W}, GetProcessImageFileName{A,W}. Implement GetPerformanceInfo, GetProcessMemoryInfo on top of NtQueryInformationProcess and GetWsChanges, QueryWorkingSet{,Ex} on top of NtQueryVirtualMemory.
------------------------------------------------------------------------
@@ -443,15 +461,85 @@ }
/*********************************************************************** + * GetPerformanceInfo (PSAPI.@) + */ +BOOL WINAPI GetPerformanceInfo( PPERFORMANCE_INFORMATION info, DWORD size ) +{ + NTSTATUS status; + + TRACE( "(%p, %ld)\n", info, size ); + + if (size < sizeof(PERFORMANCE_INFORMATION)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } +
This check is redundant. All NtQueryInformation* functions check the buffer size for you.
+ status = NtQueryInformationProcess( GetCurrentProcess(), SystemPerformanceInformation, info, size, NULL ); + + if (status) + { + SetLastError( RtlNtStatusToDosError( status )); + return FALSE + } + return FALSE; +}
@@ -459,14 +547,25 @@ /*********************************************************************** * GetWsChanges (PSAPI.@) */ -BOOL WINAPI GetWsChanges(HANDLE hProcess, - PPSAPI_WS_WATCH_INFORMATION lpWatchInfo, DWORD cb) +BOOL WINAPI GetWsChanges( HANDLE process, PPSAPI_WS_WATCH_INFORMATION watchinfo, DWORD size ) { - FIXME("(hProcess=%p, %p, %ld): stub\n", - hProcess, lpWatchInfo, cb); + NTSTATUS status; + + TRACE( "(%p, %p, %ld)\n", process, watchinfo, size ); + + if (size < sizeof(PSAPI_WS_WATCH_INFORMATION)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + }
So is this.
- memset(lpWatchInfo, 0, cb); + status = NtQueryVirtualMemory( process, NULL, ProcessWorkingSetWatch, watchinfo, size, NULL );
+ if (status) + { + SetLastError( RtlNtStatusToDosError( status )); + return FALSE + } return TRUE; }
Could you also make sure that the NtDll functions that you are calling give out a useful fixme message when called from these functions? At the moment you are mostly replacing some good fixme messages with bad fixme messages. Rob
participants (1)
-
Rob Shearman