tstNtQueryStuff.cpp revision 4a5c50434419b6801a8546f1a6b1603d96d809d7
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync/* $Id$ */
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync/** @file
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * SUP Testcase - Exploring some NT Query APIs.
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync */
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync/*
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * Copyright (C) 2006-2012 Oracle Corporation
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync *
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * available from http://www.virtualbox.org. This file is free software;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * General Public License (GPL) as published by the Free Software
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync *
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * The contents of this file may alternatively be used under the terms
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * of the Common Development and Distribution License Version 1.0
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * VirtualBox OSE distribution, in which case the provisions of the
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * CDDL are applicable instead of those of the GPL.
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync *
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * You may elect to license modified versions of this file under the
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync * terms and conditions of either the GPL or the CDDL or both.
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync */
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync/*******************************************************************************
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync* Header Files *
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync*******************************************************************************/
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#include <ntstatus.h>
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define WIN32_NO_STATUS
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync#include <Windows.h>
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync#include <winternl.h>
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsynctypedef enum
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MemoryBasicInformation = 0,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MemoryWorkingSetList,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MemorySectionName,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MemoryBasicVlmInformation
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync} MEMORY_INFORMATION_CLASS;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsynctypedef struct
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync UNICODE_STRING SectionFileName;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync WCHAR NameBuffer[ANYSIZE_ARRAY];
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync} MEMORY_SECTION_NAME;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncextern "C"
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncNTSYSAPI NTSTATUS NTAPI NtQueryVirtualMemory(IN HANDLE hProcess,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync IN LPCVOID pvWhere,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync IN MEMORY_INFORMATION_CLASS MemoryInfo,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync OUT PVOID pvBuf,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync IN SIZE_T cbBuf,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync OUT PSIZE_T pcbReturned OPTIONAL);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessDebugPort ((PROCESSINFOCLASS)7 )
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessHandleCount ((PROCESSINFOCLASS)20)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessWow64Information ((PROCESSINFOCLASS)26)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessImageFileName ((PROCESSINFOCLASS)27)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessDebugObjectHandle ((PROCESSINFOCLASS)30)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessExecuteFlags ((PROCESSINFOCLASS)34)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessImageFileNameWin32 ((PROCESSINFOCLASS)43)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#define ProcessImageFileMapping ((PROCESSINFOCLASS)44)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync#include <iprt/test.h>
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync#include <iprt/string.h>
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync/*******************************************************************************
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync* Structures and Typedefs *
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync*******************************************************************************/
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsynctypedef struct FLAGDESC
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync ULONG f;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync const char *psz;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync} FLAGDESC;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsynctypedef const FLAGDESC *PCFLAGDESC;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync/*******************************************************************************
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync* Global Variables *
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync*******************************************************************************/
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic RTTEST g_hTest = NIL_RTTEST;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsyncstatic HANDLE g_hProcess = NULL;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic char *stringifyAppend(char *pszBuf, size_t *pcbBuf, const char *pszAppend, bool fWithSpace)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync size_t cchAppend = strlen(pszAppend);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (cchAppend + 1 + fWithSpace <= *pcbBuf)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (fWithSpace)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync *pszBuf++ = ' ';
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync *pcbBuf += 1;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync memcpy(pszBuf, pszAppend, cchAppend + 1);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync *pcbBuf -= cchAppend;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync pszBuf += cchAppend;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return pszBuf;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic char *stringifyAppendUnknownFlags(uint32_t fFlags, char *pszBuf, size_t *pcbBuf, bool fWithSpace)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync for (unsigned iBit = 0; iBit < 32; iBit++)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (fFlags & RT_BIT_32(iBit))
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync char szTmp[32]; /* lazy bird */
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync RTStrPrintf(szTmp, sizeof(szTmp), "BIT(%d)", iBit);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync pszBuf = stringifyAppend(pszBuf, pcbBuf, szTmp, fWithSpace);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync fWithSpace = true;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return pszBuf;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic char *stringifyFlags(uint32_t fFlags, char *pszBuf, size_t cbBuf, PCFLAGDESC paFlagDesc, size_t cFlagDesc)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync char *pszBufStart = pszBuf;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (fFlags)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync for (size_t i = 0; i < cFlagDesc; i++)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (fFlags & paFlagDesc[i].f)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync fFlags &= ~paFlagDesc[i].f;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync pszBuf = stringifyAppend(pszBuf, &cbBuf, paFlagDesc[i].psz, pszBuf != pszBufStart);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (fFlags)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync stringifyAppendUnknownFlags(fFlags, pszBuf, &cbBuf, pszBuf != pszBufStart);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync else
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync pszBuf[0] = '0';
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync pszBuf[1] = '\0';
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return pszBufStart;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic char *stringifyMemType(uint32_t fType, char *pszBuf, size_t cbBuf)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync static const FLAGDESC s_aMemTypes[] =
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_PRIVATE, "PRIVATE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_MAPPED, "MAPPED" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_IMAGE, "IMAGE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync };
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return stringifyFlags(fType, pszBuf, cbBuf, s_aMemTypes, RT_ELEMENTS(s_aMemTypes));
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic char *stringifyMemState(uint32_t fState, char *pszBuf, size_t cbBuf)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync static const FLAGDESC s_aMemStates[] =
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_FREE, "FREE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_COMMIT, "COMMIT" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_RESERVE, "RESERVE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { MEM_DECOMMIT, "DECOMMMIT" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync };
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return stringifyFlags(fState, pszBuf, cbBuf, s_aMemStates, RT_ELEMENTS(s_aMemStates));
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic char *stringifyMemProt(uint32_t fProt, char *pszBuf, size_t cbBuf)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync static const FLAGDESC s_aProtections[] =
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_NOACCESS, "NOACCESS" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_READONLY, "READONLY" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_READWRITE, "READWRITE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_WRITECOPY, "WRITECOPY" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_EXECUTE, "EXECUTE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_EXECUTE_READ, "EXECUTE_READ" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_EXECUTE_READWRITE, "EXECUTE_READWRITE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_EXECUTE_WRITECOPY, "EXECUTE_WRITECOPY" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_GUARD, "GUARD" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_NOCACHE, "NOCACHE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync { PAGE_WRITECOMBINE, "WRITECOMBINE" },
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync };
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return stringifyFlags(fProt, pszBuf, cbBuf, s_aProtections, RT_ELEMENTS(s_aProtections));
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncstatic void tstQueryVirtualMemory(void)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync RTTestISub("NtQueryVirtualMemory");
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync uintptr_t cbAdvance = 0;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync uintptr_t uPtrWhere = 0;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync for (;;)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync SIZE_T cbActual = 0;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MEMORY_BASIC_INFORMATION MemInfo = { 0, 0, 0, 0, 0, 0, 0 };
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync NTSTATUS rcNt = NtQueryVirtualMemory(g_hProcess,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync (void const *)uPtrWhere,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MemoryBasicInformation,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync &MemInfo,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync sizeof(MemInfo),
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (!NT_SUCCESS(rcNt))
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync {
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "%p: rcNt=%#x\n", uPtrWhere, rcNt);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync break;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync /* stringify the memory state. */
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync char szMemType[1024];
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync char szMemState[1024];
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync char szMemProt[1024];
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync char szAllocProt[1024];
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if ( MemInfo.AllocationBase != NULL
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync && MemInfo.AllocationBase == MemInfo.BaseAddress
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync && MemInfo.Protect != MemInfo.AllocationProtect)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "\n");
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "%p-%p %-8s %-8s %-12s",
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync MemInfo.BaseAddress, (uintptr_t)MemInfo.BaseAddress + MemInfo.RegionSize - 1,
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync stringifyMemType(MemInfo.Type, szMemType, sizeof(szMemType)),
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync stringifyMemState(MemInfo.State, szMemState, sizeof(szMemState)),
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync stringifyMemProt(MemInfo.Protect, szMemProt, sizeof(szMemProt))
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync );
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if ((uintptr_t)MemInfo.AllocationBase != 0)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync {
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (MemInfo.AllocationBase != MemInfo.BaseAddress)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, " %p", MemInfo.AllocationBase);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, " %s", stringifyMemProt(MemInfo.AllocationProtect, szAllocProt, sizeof(szAllocProt)));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync }
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "\n");
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if ((uintptr_t)MemInfo.BaseAddress != uPtrWhere)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, " !Warning! Queried %p got BaseAddress=%p!\n",
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync uPtrWhere, MemInfo.BaseAddress);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Image or mapped, then try get a file name. */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (MemInfo.Type == MEM_IMAGE || MemInfo.Type == MEM_MAPPED)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync {
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync union
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync {
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync MEMORY_SECTION_NAME Core;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync WCHAR awcPadding[UNICODE_STRING_MAX_CHARS + (sizeof(UNICODE_STRING_MAX_CHARS) + 1) / sizeof(WCHAR)];
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync } uBuf;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RT_ZERO(uBuf);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uBuf.Core.SectionFileName.Length = UNICODE_STRING_MAX_CHARS * 2;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uBuf.Core.SectionFileName.MaximumLength = UNICODE_STRING_MAX_CHARS * 2;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uBuf.Core.SectionFileName.Buffer = &uBuf.Core.NameBuffer[0];
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryVirtualMemory(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync (void const *)uPtrWhere,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync MemorySectionName,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &uBuf,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync sizeof(uBuf),
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, " %.*ls\n",
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uBuf.Core.SectionFileName.Length / 2, uBuf.Core.SectionFileName.Buffer);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync {
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "%p: MemorySectionName - rcNt=%#x\n", uPtrWhere, rcNt);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK(rcNt == STATUS_FILE_INVALID && MemInfo.Type == MEM_MAPPED);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync }
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync }
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Advance. */
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync cbAdvance = MemInfo.RegionSize;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync //cbAdvance = 0;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (uPtrWhere + cbAdvance <= uPtrWhere)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync break;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync uPtrWhere += MemInfo.RegionSize;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync }
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsyncstatic void tstQueryInformationProcess(void)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync{
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestISub("NtQueryInformationProcess");
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync NTSTATUS rcNt;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Basic info */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync PROCESS_BASIC_INFORMATION BasicInfo;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RT_ZERO(BasicInfo);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync DWORD cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessBasicInformation,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &BasicInfo, sizeof(BasicInfo), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK_MSG(NT_SUCCESS(rcNt), ("rcNt=%#x\n", rcNt));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "BasicInfo:\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync " UniqueProcessId = %#x (%6d)\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync " PebBaseAddress = %p\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync " Reserved1 = %p ExitStatus?\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync " Reserved2a = %p AffinityMask?\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync " Reserved2b = %p (%6d) BasePriority?\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync " Reserved3 = %p (%6d) InheritedFromUniqueProcessId?\n"
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync BasicInfo.UniqueProcessId, BasicInfo.UniqueProcessId,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync BasicInfo.PebBaseAddress,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync BasicInfo.Reserved1,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync BasicInfo.Reserved2[0],
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync BasicInfo.Reserved2[1], BasicInfo.Reserved2[1],
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync BasicInfo.Reserved3, BasicInfo.Reserved3
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync );
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Debugger present? */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync DWORD_PTR uPtr = ~(DWORD_PTR)0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessDebugPort,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &uPtr, sizeof(uPtr), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK_MSG(NT_SUCCESS(rcNt), ("rcNt=%#x\n", rcNt));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessDebugPort: %p\n", uPtr);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Debug object handle, whatever that is... */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uPtr = ~(DWORD_PTR)0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessDebugObjectHandle,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &uPtr, sizeof(uPtr), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessDebugObjectHandle: %p\n", uPtr);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else if (rcNt == STATUS_PORT_NOT_SET)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessDebugObjectHandle: rcNt=%#x (STATUS_PORT_NOT_SET)\n", uPtr);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK_MSG(NT_SUCCESS(rcNt), ("rcNt=%#x\n", rcNt));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* 32-bit app on 64-bit host? */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uPtr = ~(DWORD_PTR)0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessWow64Information,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &uPtr, sizeof(uPtr), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK_MSG(NT_SUCCESS(rcNt), ("rcNt=%#x\n", rcNt));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessWow64Information: %p\n", uPtr);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Process image name (NT). */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync struct
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync {
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync UNICODE_STRING UniStr;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync WCHAR awBuffer[UNICODE_STRING_MAX_CHARS];
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync } StrBuf;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RT_ZERO(StrBuf);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.Length = UNICODE_STRING_MAX_CHARS * 2;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.MaximumLength = UNICODE_STRING_MAX_CHARS * 2;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.Buffer = &StrBuf.awBuffer[0];
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessImageFileName,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &StrBuf, sizeof(StrBuf), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK_MSG(NT_SUCCESS(rcNt), ("rcNt=%#x\n", rcNt));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessImageFileName: len=%u\n %.*ls\n",
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.Length, StrBuf.UniStr.Length, StrBuf.UniStr.Buffer);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Process image name (Win32). */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RT_ZERO(StrBuf);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.Length = UNICODE_STRING_MAX_CHARS * 2;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.MaximumLength = UNICODE_STRING_MAX_CHARS * 2;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.Buffer = &StrBuf.awBuffer[0];
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessImageFileNameWin32,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &StrBuf, sizeof(StrBuf), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTESTI_CHECK_MSG(NT_SUCCESS(rcNt), ("rcNt=%#x\n", rcNt));
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessImageFileNameWin32: len=%u\n %.*ls\n",
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync StrBuf.UniStr.Length, StrBuf.UniStr.Length, StrBuf.UniStr.Buffer);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Process image mapping. */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uPtr = ~(DWORD_PTR)0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessImageFileMapping,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &uPtr, sizeof(uPtr), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessImageFileMapping: %p\n", uPtr);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else if (rcNt == STATUS_OBJECT_TYPE_MISMATCH)
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessImageFileMapping: rcNt=%#x (STATUS_OBJECT_TYPE_MISMATCH)\n", rcNt);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIFailed("ProcessImageFileMapping: rcNt=%#x\n", rcNt);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Handles. Broken for 64-bit input. */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync uint32_t u32 = UINT32_MAX;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessHandleCount,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &u32, sizeof(u32), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessHandleCount: %#x (%d)\n", u32, u32);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIFailed("ProcessHandleCount: rcNt=%#x\n", rcNt);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /* Execute flags. */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#if 0 /* fails... wrong process handle? */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync u32 = ~(DWORD_PTR)0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync cbActual = 0;
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync rcNt = NtQueryInformationProcess(g_hProcess,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync ProcessExecuteFlags,
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync &u32, sizeof(u32), &cbActual);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync if (NT_SUCCESS(rcNt))
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "ProcessExecuteFlags: %#p\n", u32);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync else
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync RTTestIFailed("ProcessExecuteFlags: rcNt=%#x\n", rcNt);
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync#endif
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync /** @todo ProcessImageInformation */
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsyncint main()
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync{
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync RTEXITCODE rcExit = RTTestInitAndCreate("tstNtQueryStuff", &g_hTest);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync if (rcExit != RTEXITCODE_SUCCESS)
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return rcExit;
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync RTTestBanner(g_hTest);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync g_hProcess = GetCurrentProcess();
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync //tstQueryVirtualMemory();
4a5c50434419b6801a8546f1a6b1603d96d809d7vboxsync tstQueryInformationProcess();
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync return RTTestSummaryAndDestroy(g_hTest);
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync}
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync
739d6ae13d627830974df4bfba63c1d5fab987b7vboxsync