⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 error.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Unit tests for RtlNtStatusToDosError function * * Copyright (c) 2002 Andriy Palamarchuk * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <stdarg.h>#include <stdio.h>#include "ntstatus.h"#define WIN32_NO_STATUS#include "wine/test.h"#include "windef.h"#include "winbase.h"#include "rpcnterr.h"#include "winreg.h"#include "winternl.h"#include "ntsecapi.h"/* FIXME!!! this test checks only mappings, defined by MSDN: * http://support.microsoft.com/default.aspx?scid=KB;EN-US;q113996& * It is necessary to add other mappings and to test them up to Windows XP. * * Some Windows platforms don't know about all the mappings, and in such * cases they return somewhat strange results (Win98) or a generic error * like ERROR_MR_MID_NOT_FOUND (NT4). Our tests have to know about these to * not fail, but we would very much prefer Wine not to return such garbage. * To you can pass the 'strict' option to this test to force it to only check * results against the first listed value. This test should pass in strict * mode on the latest Windows platform (currently XP) and in Wine. * (of course older Windows platforms will fail to pass the strict mode) */static ULONG (WINAPI *statustodoserror)(NTSTATUS Status);static int strict;static int prepare_test(void){    HMODULE ntdll;    int argc;    char** argv;    ntdll = LoadLibraryA("ntdll.dll");    statustodoserror = (void*)GetProcAddress(ntdll, "RtlNtStatusToDosError");    if (!statustodoserror)        return 0;    argc = winetest_get_mainargs(&argv);    strict=(argc >= 3 && strcmp(argv[2],"strict")==0);    return 1;}static void cmp_call(NTSTATUS win_nt, ULONG win32, const char* message){    ULONG err;    err = statustodoserror(win_nt);    ok(err == win32,       "%s (%lx): got %ld, expected %ld",            message, win_nt, err, win32);}static void cmp_call2(NTSTATUS win_nt, ULONG win32, const char* message){    ULONG err;    err = statustodoserror(win_nt);    ok(err == win32 ||       (!strict && err == ERROR_MR_MID_NOT_FOUND),       "%s (%lx): got %ld, expected %ld (or MID_NOT_FOUND)",       message, win_nt, err, win32);}static void cmp_call3(NTSTATUS win_nt, ULONG win32_1, ULONG win32_2, const char* message){    ULONG err;    err = statustodoserror(win_nt);    ok(err == win32_1 || (!strict && err == win32_2),       "%s (%lx): got %ld, expected %ld or %ld",            message, win_nt, err, win32_1, win32_2);}static void cmp_call4(NTSTATUS win_nt, ULONG win32_1, ULONG win32_2, const char* message){    ULONG err;    err = statustodoserror(win_nt);    ok(err == win32_1 ||       (!strict && (err == win32_2 || err == ERROR_MR_MID_NOT_FOUND)),       "%s (%lx): got %ld, expected %ld or %ld",            message, win_nt, err, win32_1, win32_2);}#define cmp(status, error) \        cmp_call(status, error, #status)#define cmp2(status, error) \        cmp_call2(status, error, #status)#define cmp3(status, error1, error2) \        cmp_call3(status, error1, error2, #status)#define cmp4(status, error1, error2) \        cmp_call4(status, error1, error2, #status)static void run_error_tests(void){    cmp(STATUS_DATATYPE_MISALIGNMENT,            ERROR_NOACCESS);    cmp(STATUS_ACCESS_VIOLATION,                 ERROR_NOACCESS);    cmp2(STATUS_DATATYPE_MISALIGNMENT_ERROR,     ERROR_NOACCESS);    cmp(STATUS_CTL_FILE_NOT_SUPPORTED,           ERROR_NOT_SUPPORTED);    cmp(STATUS_PORT_ALREADY_SET,                 ERROR_INVALID_PARAMETER);    cmp(STATUS_SECTION_NOT_IMAGE,                ERROR_INVALID_PARAMETER);    cmp(STATUS_BAD_WORKING_SET_LIMIT,            ERROR_INVALID_PARAMETER);    cmp(STATUS_WORKING_SET_LIMIT_RANGE,          ERROR_INVALID_PARAMETER);    cmp(STATUS_INCOMPATIBLE_FILE_MAP,            ERROR_INVALID_PARAMETER);    cmp(STATUS_PORT_DISCONNECTED,                ERROR_INVALID_HANDLE);    cmp(STATUS_NOT_LOCKED,                       ERROR_NOT_LOCKED);    cmp(STATUS_NOT_MAPPED_VIEW,                  ERROR_INVALID_ADDRESS);    cmp(STATUS_UNABLE_TO_FREE_VM,                ERROR_INVALID_PARAMETER);    cmp(STATUS_UNABLE_TO_DELETE_SECTION,         ERROR_INVALID_PARAMETER);    cmp(STATUS_MORE_PROCESSING_REQUIRED,         ERROR_MORE_DATA);    cmp(STATUS_INVALID_CID,                      ERROR_INVALID_PARAMETER);    cmp(STATUS_STACK_OVERFLOW,                   ERROR_STACK_OVERFLOW);    cmp(STATUS_BAD_INITIAL_STACK,                ERROR_STACK_OVERFLOW);    cmp(STATUS_INVALID_VOLUME_LABEL,             ERROR_LABEL_TOO_LONG);    cmp(STATUS_SECTION_NOT_EXTENDED,             ERROR_OUTOFMEMORY);    cmp(STATUS_NOT_MAPPED_DATA,                  ERROR_INVALID_ADDRESS);    cmp2(STATUS_NO_LDT,                          ERROR_INVALID_THREAD_ID);    cmp(STATUS_INFO_LENGTH_MISMATCH,             ERROR_BAD_LENGTH);    cmp(STATUS_INVALID_INFO_CLASS,               ERROR_INVALID_PARAMETER);    cmp(STATUS_SUSPEND_COUNT_EXCEEDED,           ERROR_SIGNAL_REFUSED);    cmp(STATUS_NOTIFY_ENUM_DIR,                  ERROR_NOTIFY_ENUM_DIR);    cmp(STATUS_REGISTRY_RECOVERED,               ERROR_REGISTRY_RECOVERED);    cmp(STATUS_REGISTRY_IO_FAILED,               ERROR_REGISTRY_IO_FAILED);    cmp(STATUS_NOT_REGISTRY_FILE,                ERROR_NOT_REGISTRY_FILE);    cmp(STATUS_KEY_DELETED,                      ERROR_KEY_DELETED);    cmp(STATUS_NO_LOG_SPACE,                     ERROR_NO_LOG_SPACE);    cmp(STATUS_KEY_HAS_CHILDREN,                 ERROR_KEY_HAS_CHILDREN);    cmp(STATUS_CHILD_MUST_BE_VOLATILE,           ERROR_CHILD_MUST_BE_VOLATILE);    cmp(STATUS_REGISTRY_CORRUPT,                 ERROR_BADDB);    cmp(STATUS_DLL_NOT_FOUND,                    ERROR_MOD_NOT_FOUND);    cmp(STATUS_DLL_INIT_FAILED,                  ERROR_DLL_INIT_FAILED);    cmp2(STATUS_INVALID_IMPORT_OF_NON_DLL,       ERROR_INVALID_IMPORT_OF_NON_DLL);    cmp(STATUS_ORDINAL_NOT_FOUND,                ERROR_INVALID_ORDINAL);    cmp(STATUS_DRIVER_ORDINAL_NOT_FOUND,         ERROR_INVALID_ORDINAL);    cmp2(STATUS_DRIVER_UNABLE_TO_LOAD,           ERROR_BAD_DRIVER);    cmp(STATUS_ENTRYPOINT_NOT_FOUND,             ERROR_PROC_NOT_FOUND);    cmp(STATUS_DRIVER_ENTRYPOINT_NOT_FOUND,      ERROR_PROC_NOT_FOUND);    cmp(STATUS_PENDING,                          ERROR_IO_PENDING);    cmp(STATUS_MORE_ENTRIES,                     ERROR_MORE_DATA);    cmp(STATUS_INTEGER_OVERFLOW,                 ERROR_ARITHMETIC_OVERFLOW);    cmp(STATUS_BUFFER_OVERFLOW,                  ERROR_MORE_DATA);    cmp(STATUS_NO_MORE_FILES,                    ERROR_NO_MORE_FILES);    cmp(STATUS_NO_INHERITANCE,                   ERROR_NO_INHERITANCE);    cmp(STATUS_NO_MORE_EAS,                      ERROR_NO_MORE_ITEMS);    cmp(STATUS_NO_MORE_ENTRIES,                  ERROR_NO_MORE_ITEMS);    cmp(STATUS_GUIDS_EXHAUSTED,                  ERROR_NO_MORE_ITEMS);    cmp(STATUS_AGENTS_EXHAUSTED,                 ERROR_NO_MORE_ITEMS);    cmp(STATUS_UNSUCCESSFUL,                     ERROR_GEN_FAILURE);    cmp(STATUS_TOO_MANY_LINKS,                   ERROR_TOO_MANY_LINKS);    cmp(STATUS_NOT_IMPLEMENTED,                  ERROR_INVALID_FUNCTION);    cmp(STATUS_ILLEGAL_FUNCTION,                 ERROR_INVALID_FUNCTION);    cmp(STATUS_IN_PAGE_ERROR,                    ERROR_SWAPERROR);    cmp(STATUS_PAGEFILE_QUOTA,                   ERROR_PAGEFILE_QUOTA);    cmp(STATUS_COMMITMENT_LIMIT,                 ERROR_COMMITMENT_LIMIT);    cmp(STATUS_SECTION_TOO_BIG,                  ERROR_NOT_ENOUGH_MEMORY);    cmp(RPC_NT_SS_IN_NULL_CONTEXT,               ERROR_INVALID_HANDLE);    cmp(RPC_NT_INVALID_BINDING,                  ERROR_INVALID_HANDLE);    cmp(STATUS_INVALID_HANDLE,                   ERROR_INVALID_HANDLE);    cmp(STATUS_OBJECT_TYPE_MISMATCH,             ERROR_INVALID_HANDLE);    cmp(STATUS_FILE_CLOSED,                      ERROR_INVALID_HANDLE);    cmp(STATUS_INVALID_PORT_HANDLE,              ERROR_INVALID_HANDLE);    cmp(STATUS_HANDLE_NOT_CLOSABLE,              ERROR_INVALID_HANDLE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -