/*********************************************************************** * VirtualUnlock (KERNEL32.@) * * Unlocks a range of pages in the virtual address space. * * PARAMS * addr [I] Address of first byte of range. * size [I] Number of bytes in range. * * RETURNS * Success: TRUE. * Failure: FALSE. * * NOTES * Always returns TRUE. * */ BOOL WINAPI VirtualUnlock( LPVOID addr, SIZE_T size ) { NTSTATUS status = NtUnlockVirtualMemory( GetCurrentProcess(), &addr, &size, 1 ); if (status) SetLastError( RtlNtStatusToDosError(status) ); return !status; }
/*********************************************************************** * VirtualFreeEx (KERNEL32.@) * * Releases or decommits a region of pages in virtual address space. * * PARAMS * process [I] Handle to process. * addr [I] Address of region to free. * size [I] Size of region. * type [I] Type of operation. * * RETURNS * Success: TRUE. * Failure: FALSE. */ BOOL WINAPI VirtualFreeEx( HANDLE process, LPVOID addr, SIZE_T size, DWORD type ) { NTSTATUS status = NtFreeVirtualMemory( process, &addr, &size, type ); if (status) SetLastError( RtlNtStatusToDosError(status) ); return !status; }
NET_API_STATUS WINAPI NetpNtStatusToApiStatus(NTSTATUS Status) { return RtlNtStatusToDosError(Status); }
/********************************************************************* * GetSystemTimes (KERNEL32.@) * * Retrieves system timing information * * PARAMS * lpIdleTime [O] Destination for idle time. * lpKernelTime [O] Destination for kernel time. * lpUserTime [O] Destination for user time. * * RETURNS * TRUE if success, FALSE otherwise. */ BOOL WINAPI GetSystemTimes(LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime) { LARGE_INTEGER idle_time, kernel_time, user_time; SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION *sppi; SYSTEM_BASIC_INFORMATION sbi; NTSTATUS status; ULONG ret_size; int i; TRACE("(%p,%p,%p)\n", lpIdleTime, lpKernelTime, lpUserTime); status = NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), &ret_size ); if (status != STATUS_SUCCESS) { SetLastError( RtlNtStatusToDosError(status) ); return FALSE; } sppi = HeapAlloc( GetProcessHeap(), 0, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * sbi.NumberOfProcessors); if (!sppi) { SetLastError( ERROR_OUTOFMEMORY ); return FALSE; } status = NtQuerySystemInformation( SystemProcessorPerformanceInformation, sppi, sizeof(*sppi) * sbi.NumberOfProcessors, &ret_size ); if (status != STATUS_SUCCESS) { HeapFree( GetProcessHeap(), 0, sppi ); SetLastError( RtlNtStatusToDosError(status) ); return FALSE; } idle_time.QuadPart = 0; kernel_time.QuadPart = 0; user_time.QuadPart = 0; for (i = 0; i < sbi.NumberOfProcessors; i++) { idle_time.QuadPart += sppi[i].IdleTime.QuadPart; kernel_time.QuadPart += sppi[i].KernelTime.QuadPart; user_time.QuadPart += sppi[i].UserTime.QuadPart; } if (lpIdleTime) { lpIdleTime->dwLowDateTime = idle_time.u.LowPart; lpIdleTime->dwHighDateTime = idle_time.u.HighPart; } if (lpKernelTime) { lpKernelTime->dwLowDateTime = kernel_time.u.LowPart; lpKernelTime->dwHighDateTime = kernel_time.u.HighPart; } if (lpUserTime) { lpUserTime->dwLowDateTime = user_time.u.LowPart; lpUserTime->dwHighDateTime = user_time.u.HighPart; } HeapFree( GetProcessHeap(), 0, sppi ); return TRUE; }
/****************************************************************************** * LsaNtStatusToWinError [ADVAPI32.@] * * Converts an LSA NTSTATUS code to a Windows error code. * * PARAMS * Status [I] NTSTATUS code. * * RETURNS * Success: Corresponding Windows error code. * Failure: ERROR_MR_MID_NOT_FOUND. */ ULONG WINAPI LsaNtStatusToWinError(NTSTATUS Status) { return RtlNtStatusToDosError(Status); }
/* * PipeQueryInfo * * Purpose: * * Query basic info about pipe. * */ VOID PipeQueryInfo( PROP_OBJECT_INFO *Context, HWND hwndDlg ) { LPWSTR lpType; HANDLE hPipe; NTSTATUS status; WCHAR szBuffer[MAX_PATH]; IO_STATUS_BLOCK iost; FILE_PIPE_LOCAL_INFORMATION fpli; //validate context if (Context == NULL) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); PipeDisplayError(hwndDlg); return; } if ( (Context->lpObjectName == NULL) || (Context->lpCurrentObjectPath == NULL) ) { SetLastError(ERROR_OBJECT_NOT_FOUND); PipeDisplayError(hwndDlg); return; } SetDlgItemText(hwndDlg, ID_PIPE_FULLPATH, Context->lpCurrentObjectPath); //open pipe hPipe = NULL; if (!PipeOpenObjectMethod(Context, &hPipe, GENERIC_READ)) { //on error display last win32 error PipeDisplayError(hwndDlg); return; } RtlSecureZeroMemory(&fpli, sizeof(fpli)); status = NtQueryInformationFile(hPipe, &iost, &fpli, sizeof(fpli), FilePipeLocalInformation); if (NT_SUCCESS(status)) { //Type lpType = TEXT("?"); switch (fpli.NamedPipeType) { case FILE_PIPE_BYTE_STREAM_TYPE: lpType = TEXT("Byte stream"); break; case FILE_PIPE_MESSAGE_TYPE: lpType = TEXT("Message"); break; } SetDlgItemText(hwndDlg, ID_PIPE_TYPEMODE, lpType); //AccessMode lpType = TEXT("?"); switch (fpli.NamedPipeConfiguration) { case FILE_PIPE_INBOUND: lpType = TEXT("Inbound"); break; case FILE_PIPE_OUTBOUND: lpType = TEXT("Outbound"); break; case FILE_PIPE_FULL_DUPLEX: lpType = TEXT("Duplex"); break; } SetDlgItemText(hwndDlg, ID_PIPE_ACCESSMODE, lpType); //CurrentInstances RtlSecureZeroMemory(&szBuffer, sizeof(szBuffer)); ultostr(fpli.CurrentInstances, szBuffer); SetDlgItemText(hwndDlg, ID_PIPE_CURINSTANCES, szBuffer); //MaximumInstances RtlSecureZeroMemory(&szBuffer, sizeof(szBuffer)); if (fpli.MaximumInstances == MAXDWORD) { _strcpy(szBuffer, TEXT("Unlimited")); } else { ultostr(fpli.MaximumInstances, szBuffer); } SetDlgItemText(hwndDlg, ID_PIPE_MAXINSTANCES, szBuffer); //InboundQuota RtlSecureZeroMemory(&szBuffer, sizeof(szBuffer)); ultostr(fpli.InboundQuota, szBuffer); SetDlgItemText(hwndDlg, ID_PIPE_INBUFFER, szBuffer); //OutboundQuota RtlSecureZeroMemory(&szBuffer, sizeof(szBuffer)); ultostr(fpli.OutboundQuota, szBuffer); SetDlgItemText(hwndDlg, ID_PIPE_OUTBUFFER, szBuffer); //WriteQuotaAvailable RtlSecureZeroMemory(&szBuffer, sizeof(szBuffer)); ultostr(fpli.WriteQuotaAvailable, szBuffer); SetDlgItemText(hwndDlg, ID_PIPE_WRITEQUOTAAVAIL, szBuffer); } else { //show detail on query error SetLastError(RtlNtStatusToDosError(status)); PipeDisplayError(hwndDlg); } NtClose(hPipe); }