From e2ae82deb2ac374530a44fdb23a5baf0728f2c46 Mon Sep 17 00:00:00 2001 From: sukibaby <163092272+sukibaby@users.noreply.github.com> Date: Wed, 31 Jul 2024 03:54:51 -0700 Subject: [PATCH] windows sdk 5.0 -> 10.0 --- src/archutils/Win32/ddk/dbghelp.h | 6839 ++++++++------ src/archutils/Win32/ddk/hidsdi.h | 933 +- src/archutils/Win32/ddk/hidusage.h | 3282 ++++++- src/archutils/Win32/ddk/setupapi.h | 13567 +++++++++++++++------------ 4 files changed, 15362 insertions(+), 9259 deletions(-) diff --git a/src/archutils/Win32/ddk/dbghelp.h b/src/archutils/Win32/ddk/dbghelp.h index 6942b3249b..91c82cb39a 100644 --- a/src/archutils/Win32/ddk/dbghelp.h +++ b/src/archutils/Win32/ddk/dbghelp.h @@ -1,2654 +1,4185 @@ -/*++ BUILD Version: 0001 Increment this if a change has global effects - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - - dbghelp.h - -Abstract: - - This module defines the prototypes and constants required for the image - help routines. - - Contains debugging support routines that are redistributable. - -Revision History: - ---*/ - -#ifndef _DBGHELP_ -#define _DBGHELP_ - -#pragma once - - -// As a general principal always call the 64 bit version -// of every API, if a choice exists. The 64 bit version -// works great on 32 bit platforms, and is forward -// compatible to 64 bit platforms. - -#ifdef _WIN64 -#ifndef _IMAGEHLP64 -#define _IMAGEHLP64 -#endif -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _IMAGEHLP_SOURCE_ - #define IMAGEAPI __stdcall - #define DBHLP_DEPRECIATED -#else - #define IMAGEAPI DECLSPEC_IMPORT __stdcall - #if !defined(MIDL_PASS) - #define DBHLP_DEPRECIATED __declspec(deprecated) - #else - #define DBHLP_DEPRECIATED - #endif -#endif - -#define DBHLPAPI IMAGEAPI - -#define IMAGE_SEPARATION (64*1024) - -typedef struct _LOADED_IMAGE { - PSTR ModuleName; - HANDLE hFile; - PUCHAR MappedAddress; -#ifdef _IMAGEHLP64 - PIMAGE_NT_HEADERS64 FileHeader; -#else - PIMAGE_NT_HEADERS32 FileHeader; -#endif - PIMAGE_SECTION_HEADER LastRvaSection; - ULONG NumberOfSections; - PIMAGE_SECTION_HEADER Sections; - ULONG Characteristics; - BOOLEAN fSystemImage; - BOOLEAN fDOSImage; - LIST_ENTRY Links; - ULONG SizeOfImage; -} LOADED_IMAGE, *PLOADED_IMAGE; - -#define MAX_SYM_NAME 2000 - - -HANDLE -IMAGEAPI -FindDebugInfoFile ( - PSTR FileName, - PSTR SymbolPath, - PSTR DebugFilePath - ); - -typedef BOOL -(CALLBACK *PFIND_DEBUG_FILE_CALLBACK)( - HANDLE FileHandle, - PSTR FileName, - PVOID CallerData - ); - -HANDLE -IMAGEAPI -FindDebugInfoFileEx ( - PSTR FileName, - PSTR SymbolPath, - PSTR DebugFilePath, - PFIND_DEBUG_FILE_CALLBACK Callback, - PVOID CallerData - ); - -typedef BOOL -(CALLBACK *PFINDFILEINPATHCALLBACK)( - PSTR filename, - PVOID context - ); - -BOOL -IMAGEAPI -SymFindFileInPath( - HANDLE hprocess, - LPSTR SearchPath, - LPSTR FileName, - PVOID id, - DWORD two, - DWORD three, - DWORD flags, - LPSTR FoundFile, - PFINDFILEINPATHCALLBACK callback, - PVOID context - ); - -HANDLE -IMAGEAPI -FindExecutableImage( - PSTR FileName, - PSTR SymbolPath, - PSTR ImageFilePath - ); - -typedef BOOL -(CALLBACK *PFIND_EXE_FILE_CALLBACK)( - HANDLE FileHandle, - PSTR FileName, - PVOID CallerData - ); - -HANDLE -IMAGEAPI -FindExecutableImageEx( - PSTR FileName, - PSTR SymbolPath, - PSTR ImageFilePath, - PFIND_EXE_FILE_CALLBACK Callback, - PVOID CallerData - ); - -PIMAGE_NT_HEADERS -IMAGEAPI -ImageNtHeader ( - IN PVOID Base - ); - -PVOID -IMAGEAPI -ImageDirectoryEntryToDataEx ( - IN PVOID Base, - IN BOOLEAN MappedAsImage, - IN USHORT DirectoryEntry, - OUT PULONG Size, - OUT PIMAGE_SECTION_HEADER *FoundHeader OPTIONAL - ); - -PVOID -IMAGEAPI -ImageDirectoryEntryToData ( - IN PVOID Base, - IN BOOLEAN MappedAsImage, - IN USHORT DirectoryEntry, - OUT PULONG Size - ); - -PIMAGE_SECTION_HEADER -IMAGEAPI -ImageRvaToSection( - IN PIMAGE_NT_HEADERS NtHeaders, - IN PVOID Base, - IN ULONG Rva - ); - -PVOID -IMAGEAPI -ImageRvaToVa( - IN PIMAGE_NT_HEADERS NtHeaders, - IN PVOID Base, - IN ULONG Rva, - IN OUT PIMAGE_SECTION_HEADER *LastRvaSection - ); - -// Symbol server exports - -typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR, LPCSTR, PVOID, DWORD, DWORD, LPSTR); -typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID); -typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID); -typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64); -typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action, ULONG64 data, ULONG64 context); -typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)(); -typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR); - -#define SSRVOPT_CALLBACK 0x001 -#define SSRVOPT_DWORD 0x002 -#define SSRVOPT_DWORDPTR 0x004 -#define SSRVOPT_GUIDPTR 0x008 -#define SSRVOPT_OLDGUIDPTR 0x010 -#define SSRVOPT_UNATTENDED 0x020 -#define SSRVOPT_NOCOPY 0x040 -#define SSRVOPT_PARENTWIN 0x080 -#define SSRVOPT_PARAMTYPE 0x100 -#define SSRVOPT_SECURE 0x200 -#define SSRVOPT_TRACE 0x400 -#define SSRVOPT_RESET ((ULONG_PTR)-1) - -#define SSRVACTION_TRACE 1 - - -#ifndef _WIN64 -// This api won't be ported to Win64 - Fix your code. - -typedef struct _IMAGE_DEBUG_INFORMATION { - LIST_ENTRY List; - DWORD ReservedSize; - PVOID ReservedMappedBase; - USHORT ReservedMachine; - USHORT ReservedCharacteristics; - DWORD ReservedCheckSum; - DWORD ImageBase; - DWORD SizeOfImage; - - DWORD ReservedNumberOfSections; - PIMAGE_SECTION_HEADER ReservedSections; - - DWORD ReservedExportedNamesSize; - PSTR ReservedExportedNames; - - DWORD ReservedNumberOfFunctionTableEntries; - PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; - DWORD ReservedLowestFunctionStartingAddress; - DWORD ReservedHighestFunctionEndingAddress; - - DWORD ReservedNumberOfFpoTableEntries; - PFPO_DATA ReservedFpoTableEntries; - - DWORD SizeOfCoffSymbols; - PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; - - DWORD ReservedSizeOfCodeViewSymbols; - PVOID ReservedCodeViewSymbols; - - PSTR ImageFilePath; - PSTR ImageFileName; - PSTR ReservedDebugFilePath; - - DWORD ReservedTimeDateStamp; - - BOOL ReservedRomImage; - PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; - DWORD ReservedNumberOfDebugDirectories; - - DWORD ReservedOriginalFunctionTableBaseAddress; - - DWORD Reserved[ 2 ]; - -} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; - - -PIMAGE_DEBUG_INFORMATION -IMAGEAPI -MapDebugInformation( - HANDLE FileHandle, - PSTR FileName, - PSTR SymbolPath, - DWORD ImageBase - ); - -BOOL -IMAGEAPI -UnmapDebugInformation( - PIMAGE_DEBUG_INFORMATION DebugInfo - ); - -#endif - -BOOL -IMAGEAPI -SearchTreeForFile( - PSTR RootPath, - PSTR InputPathName, - PSTR OutputPathBuffer - ); - -typedef BOOL -(CALLBACK *PENUMDIRTREE_CALLBACK)( - LPCSTR FilePath, - PVOID CallerData - ); - -BOOL -IMAGEAPI -EnumDirTree( - HANDLE hProcess, - PSTR RootPath, - PSTR InputPathName, - PSTR OutputPathBuffer, - PENUMDIRTREE_CALLBACK Callback, - PVOID CallbackData - ); - -BOOL -IMAGEAPI -MakeSureDirectoryPathExists( - PCSTR DirPath - ); - -// -// UnDecorateSymbolName Flags -// - -#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration -#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) // Remove leading underscores from MS extended keywords -#define UNDNAME_NO_MS_KEYWORDS (0x0002) // Disable expansion of MS extended keywords -#define UNDNAME_NO_FUNCTION_RETURNS (0x0004) // Disable expansion of return type for primary declaration -#define UNDNAME_NO_ALLOCATION_MODEL (0x0008) // Disable expansion of the declaration model -#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) // Disable expansion of the declaration language specifier -#define UNDNAME_NO_MS_THISTYPE (0x0020) // NYI Disable expansion of MS keywords on the 'this' type for primary declaration -#define UNDNAME_NO_CV_THISTYPE (0x0040) // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration -#define UNDNAME_NO_THISTYPE (0x0060) // Disable all modifiers on the 'this' type -#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) // Disable expansion of access specifiers for members -#define UNDNAME_NO_THROW_SIGNATURES (0x0100) // Disable expansion of 'throw-signatures' for functions and pointers to functions -#define UNDNAME_NO_MEMBER_TYPE (0x0200) // Disable expansion of 'static' or 'virtual'ness of members -#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) // Disable expansion of MS model for UDT returns -#define UNDNAME_32_BIT_DECODE (0x0800) // Undecorate 32-bit decorated names -#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for primary declaration; - // return just [scope::]name. Does expand template params -#define UNDNAME_NO_ARGUMENTS (0x2000) // Don't undecorate arguments to function -#define UNDNAME_NO_SPECIAL_SYMS (0x4000) // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc) - -DWORD -IMAGEAPI -WINAPI -UnDecorateSymbolName( - PCSTR DecoratedName, // Name to undecorate - PSTR UnDecoratedName, // If NULL, it will be allocated - DWORD UndecoratedLength, // The maximym length - DWORD Flags // See above. - ); - - -// -// these values are used for synthesized file types -// that can be passed in as image headers instead of -// the standard ones from ntimage.h -// - -#define DBHHEADER_DEBUGDIRS 0x1 - -typedef struct _MODLOAD_DATA { - DWORD ssize; // size of this struct - DWORD ssig; // signature identifying the passed data - PVOID data; // pointer to passed data - DWORD size; // size of passed data - DWORD flags; // options -} MODLOAD_DATA, *PMODLOAD_DATA; - -// -// StackWalking API -// - -typedef enum { - AddrMode1616, - AddrMode1632, - AddrModeReal, - AddrModeFlat -} ADDRESS_MODE; - -typedef struct _tagADDRESS64 { - DWORD64 Offset; - WORD Segment; - ADDRESS_MODE Mode; -} ADDRESS64, *LPADDRESS64; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define ADDRESS ADDRESS64 -#define LPADDRESS LPADDRESS64 -#else -typedef struct _tagADDRESS { - DWORD Offset; - WORD Segment; - ADDRESS_MODE Mode; -} ADDRESS, *LPADDRESS; - -__inline -void -Address32To64( - LPADDRESS a32, - LPADDRESS64 a64 - ) -{ - a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset; - a64->Segment = a32->Segment; - a64->Mode = a32->Mode; -} - -__inline -void -Address64To32( - LPADDRESS64 a64, - LPADDRESS a32 - ) -{ - a32->Offset = (ULONG)a64->Offset; - a32->Segment = a64->Segment; - a32->Mode = a64->Mode; -} -#endif - -// -// This structure is included in the STACKFRAME structure, -// and is used to trace through usermode callbacks in a thread's -// kernel stack. The values must be copied by the kernel debugger -// from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets. -// - -// -// New KDHELP structure for 64 bit system support. -// This structure is preferred in new code. -// -typedef struct _KDHELP64 { - - // - // address of kernel thread object, as provided in the - // WAIT_STATE_CHANGE packet. - // - DWORD64 Thread; - - // - // offset in thread object to pointer to the current callback frame - // in kernel stack. - // - DWORD ThCallbackStack; - - // - // offset in thread object to pointer to the current callback backing - // store frame in kernel stack. - // - DWORD ThCallbackBStore; - - // - // offsets to values in frame: - // - // address of next callback frame - DWORD NextCallback; - - // address of saved frame pointer (if applicable) - DWORD FramePointer; - - - // - // Address of the kernel function that calls out to user mode - // - DWORD64 KiCallUserMode; - - // - // Address of the user mode dispatcher function - // - DWORD64 KeUserCallbackDispatcher; - - // - // Lowest kernel mode address - // - DWORD64 SystemRangeStart; - - DWORD64 Reserved[8]; - -} KDHELP64, *PKDHELP64; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define KDHELP KDHELP64 -#define PKDHELP PKDHELP64 -#else -typedef struct _KDHELP { - - // - // address of kernel thread object, as provided in the - // WAIT_STATE_CHANGE packet. - // - DWORD Thread; - - // - // offset in thread object to pointer to the current callback frame - // in kernel stack. - // - DWORD ThCallbackStack; - - // - // offsets to values in frame: - // - // address of next callback frame - DWORD NextCallback; - - // address of saved frame pointer (if applicable) - DWORD FramePointer; - - // - // Address of the kernel function that calls out to user mode - // - DWORD KiCallUserMode; - - // - // Address of the user mode dispatcher function - // - DWORD KeUserCallbackDispatcher; - - // - // Lowest kernel mode address - // - DWORD SystemRangeStart; - - // - // offset in thread object to pointer to the current callback backing - // store frame in kernel stack. - // - DWORD ThCallbackBStore; - - DWORD Reserved[8]; - -} KDHELP, *PKDHELP; - -__inline -void -KdHelp32To64( - PKDHELP p32, - PKDHELP64 p64 - ) -{ - p64->Thread = p32->Thread; - p64->ThCallbackStack = p32->ThCallbackStack; - p64->NextCallback = p32->NextCallback; - p64->FramePointer = p32->FramePointer; - p64->KiCallUserMode = p32->KiCallUserMode; - p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher; - p64->SystemRangeStart = p32->SystemRangeStart; -} -#endif - -typedef struct _tagSTACKFRAME64 { - ADDRESS64 AddrPC; // program counter - ADDRESS64 AddrReturn; // return address - ADDRESS64 AddrFrame; // frame pointer - ADDRESS64 AddrStack; // stack pointer - ADDRESS64 AddrBStore; // backing store pointer - PVOID FuncTableEntry; // pointer to pdata/fpo or NULL - DWORD64 Params[4]; // possible arguments to the function - BOOL Far; // WOW far call - BOOL Virtual; // is this a virtual frame? - DWORD64 Reserved[3]; - KDHELP64 KdHelp; -} STACKFRAME64, *LPSTACKFRAME64; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define STACKFRAME STACKFRAME64 -#define LPSTACKFRAME LPSTACKFRAME64 -#else -typedef struct _tagSTACKFRAME { - ADDRESS AddrPC; // program counter - ADDRESS AddrReturn; // return address - ADDRESS AddrFrame; // frame pointer - ADDRESS AddrStack; // stack pointer - PVOID FuncTableEntry; // pointer to pdata/fpo or NULL - DWORD Params[4]; // possible arguments to the function - BOOL Far; // WOW far call - BOOL Virtual; // is this a virtual frame? - DWORD Reserved[3]; - KDHELP KdHelp; - ADDRESS AddrBStore; // backing store pointer -} STACKFRAME, *LPSTACKFRAME; -#endif - - -typedef -BOOL -(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)( - HANDLE hProcess, - DWORD64 qwBaseAddress, - PVOID lpBuffer, - DWORD nSize, - LPDWORD lpNumberOfBytesRead - ); - -typedef -PVOID -(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)( - HANDLE hProcess, - DWORD64 AddrBase - ); - -typedef -DWORD64 -(__stdcall *PGET_MODULE_BASE_ROUTINE64)( - HANDLE hProcess, - DWORD64 Address - ); - -typedef -DWORD64 -(__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)( - HANDLE hProcess, - HANDLE hThread, - LPADDRESS64 lpaddr - ); - -BOOL -IMAGEAPI -StackWalk64( - DWORD MachineType, - HANDLE hProcess, - HANDLE hThread, - LPSTACKFRAME64 StackFrame, - PVOID ContextRecord, - PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, - PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, - PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, - PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) - -#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64 -#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64 -#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64 -#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64 - -#define StackWalk StackWalk64 - -#else - -typedef -BOOL -(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)( - HANDLE hProcess, - DWORD lpBaseAddress, - PVOID lpBuffer, - DWORD nSize, - PDWORD lpNumberOfBytesRead - ); - -typedef -PVOID -(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)( - HANDLE hProcess, - DWORD AddrBase - ); - -typedef -DWORD -(__stdcall *PGET_MODULE_BASE_ROUTINE)( - HANDLE hProcess, - DWORD Address - ); - -typedef -DWORD -(__stdcall *PTRANSLATE_ADDRESS_ROUTINE)( - HANDLE hProcess, - HANDLE hThread, - LPADDRESS lpaddr - ); - -BOOL -IMAGEAPI -StackWalk( - DWORD MachineType, - HANDLE hProcess, - HANDLE hThread, - LPSTACKFRAME StackFrame, - PVOID ContextRecord, - PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, - PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, - PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, - PTRANSLATE_ADDRESS_ROUTINE TranslateAddress - ); - -#endif - - -#define API_VERSION_NUMBER 9 - -typedef struct API_VERSION { - USHORT MajorVersion; - USHORT MinorVersion; - USHORT Revision; - USHORT Reserved; -} API_VERSION, *LPAPI_VERSION; - -LPAPI_VERSION -IMAGEAPI -ImagehlpApiVersion( - VOID - ); - -LPAPI_VERSION -IMAGEAPI -ImagehlpApiVersionEx( - LPAPI_VERSION AppVersion - ); - -DWORD -IMAGEAPI -GetTimestampForLoadedLibrary( - HMODULE Module - ); - -// -// typedefs for function pointers -// -typedef BOOL -(CALLBACK *PSYM_ENUMMODULES_CALLBACK64)( - PSTR ModuleName, - DWORD64 BaseOfDll, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)( - PSTR SymbolName, - DWORD64 SymbolAddress, - ULONG SymbolSize, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)( - PWSTR SymbolName, - DWORD64 SymbolAddress, - ULONG SymbolSize, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PENUMLOADED_MODULES_CALLBACK64)( - PSTR ModuleName, - DWORD64 ModuleBase, - ULONG ModuleSize, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)( - HANDLE hProcess, - ULONG ActionCode, - ULONG64 CallbackData, - ULONG64 UserContext - ); - -typedef -PVOID -(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)( - HANDLE hProcess, - DWORD AddrBase, - PVOID UserContext - ); - -typedef -PVOID -(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)( - HANDLE hProcess, - ULONG64 AddrBase, - ULONG64 UserContext - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) - -#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64 -#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64 -#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W -#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64 -#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64 -#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64 - -#else - -typedef BOOL -(CALLBACK *PSYM_ENUMMODULES_CALLBACK)( - PSTR ModuleName, - ULONG BaseOfDll, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)( - PSTR SymbolName, - ULONG SymbolAddress, - ULONG SymbolSize, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)( - PWSTR SymbolName, - ULONG SymbolAddress, - ULONG SymbolSize, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PENUMLOADED_MODULES_CALLBACK)( - PSTR ModuleName, - ULONG ModuleBase, - ULONG ModuleSize, - PVOID UserContext - ); - -typedef BOOL -(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)( - HANDLE hProcess, - ULONG ActionCode, - PVOID CallbackData, - PVOID UserContext - ); - -#endif - - -// -// flags found in SYMBOL_INFO.Flags -// - -#define SYMFLAG_VALUEPRESENT 0x00000001 -#define SYMFLAG_REGISTER 0x00000008 -#define SYMFLAG_REGREL 0x00000010 -#define SYMFLAG_FRAMEREL 0x00000020 -#define SYMFLAG_PARAMETER 0x00000040 -#define SYMFLAG_LOCAL 0x00000080 -#define SYMFLAG_CONSTANT 0x00000100 -#define SYMFLAG_EXPORT 0x00000200 -#define SYMFLAG_FORWARDER 0x00000400 -#define SYMFLAG_FUNCTION 0x00000800 -#define SYMFLAG_VIRTUAL 0x00001000 -#define SYMFLAG_THUNK 0x00002000 -#define SYMFLAG_TLSREL 0x00004000 - -// -// symbol type enumeration -// -typedef enum { - SymNone = 0, - SymCoff, - SymCv, - SymPdb, - SymExport, - SymDeferred, - SymSym, // .sym file - SymDia, - SymVirtual, - NumSymTypes -} SYM_TYPE; - -// -// symbol data structure -// - -typedef struct _IMAGEHLP_SYMBOL64 { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL64) - DWORD64 Address; // virtual address including dll base address - DWORD Size; // estimated size of symbol, can be zero - DWORD Flags; // info about the symbols, see the SYMF defines - DWORD MaxNameLength; // maximum size of symbol name in 'Name' - CHAR Name[1]; // symbol name (null terminated string) -} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; - -typedef struct _IMAGEHLP_SYMBOL64_PACKAGE { - IMAGEHLP_SYMBOL64 sym; - CHAR name[MAX_SYM_NAME + 1]; -} IMAGEHLP_SYMBOL64_PACKAGE, *PIMAGEHLP_SYMBOL64_PACKAGE; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) - - #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64 - #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64 - #define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE - #define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE - -#else - - typedef struct _IMAGEHLP_SYMBOL { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL) - DWORD Address; // virtual address including dll base address - DWORD Size; // estimated size of symbol, can be zero - DWORD Flags; // info about the symbols, see the SYMF defines - DWORD MaxNameLength; // maximum size of symbol name in 'Name' - CHAR Name[1]; // symbol name (null terminated string) - } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; - - typedef struct _IMAGEHLP_SYMBOL_PACKAGE { - IMAGEHLP_SYMBOL sym; - CHAR name[MAX_SYM_NAME + 1]; - } IMAGEHLP_SYMBOL_PACKAGE, *PIMAGEHLP_SYMBOL_PACKAGE; - -#endif - -// -// module data structure -// - -typedef struct _IMAGEHLP_MODULE64 { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) - DWORD64 BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - CHAR ModuleName[32]; // module name - CHAR ImageName[256]; // image name - CHAR LoadedImageName[256]; // symbol file name -} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; - -typedef struct _IMAGEHLP_MODULE64W { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) - DWORD64 BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - WCHAR ModuleName[32]; // module name - WCHAR ImageName[256]; // image name - WCHAR LoadedImageName[256]; // symbol file name -} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define IMAGEHLP_MODULE IMAGEHLP_MODULE64 -#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64 -#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64 -#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64 -#else -typedef struct _IMAGEHLP_MODULE { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) - DWORD BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - CHAR ModuleName[32]; // module name - CHAR ImageName[256]; // image name - CHAR LoadedImageName[256]; // symbol file name -} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; - -typedef struct _IMAGEHLP_MODULEW { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) - DWORD BaseOfImage; // base load address of module - DWORD ImageSize; // virtual size of the loaded module - DWORD TimeDateStamp; // date/time stamp from pe header - DWORD CheckSum; // checksum from the pe header - DWORD NumSyms; // number of symbols in the symbol table - SYM_TYPE SymType; // type of symbols loaded - WCHAR ModuleName[32]; // module name - WCHAR ImageName[256]; // image name - WCHAR LoadedImageName[256]; // symbol file name -} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; -#endif - -// -// source file line data structure -// - -typedef struct _IMAGEHLP_LINE64 { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64) - PVOID Key; // internal - DWORD LineNumber; // line number in file - PCHAR FileName; // full filename - DWORD64 Address; // first instruction of line -} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define IMAGEHLP_LINE IMAGEHLP_LINE64 -#define PIMAGEHLP_LINE PIMAGEHLP_LINE64 -#else -typedef struct _IMAGEHLP_LINE { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE) - PVOID Key; // internal - DWORD LineNumber; // line number in file - PCHAR FileName; // full filename - DWORD Address; // first instruction of line -} IMAGEHLP_LINE, *PIMAGEHLP_LINE; -#endif - -// -// source file structure -// - -typedef struct _SOURCEFILE { - DWORD64 ModBase; // base address of loaded module - PCHAR FileName; // full filename of source -} SOURCEFILE, *PSOURCEFILE; - -// -// data structures used for registered symbol callbacks -// - -#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 -#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 -#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 -#define CBA_SYMBOLS_UNLOADED 0x00000004 -#define CBA_DUPLICATE_SYMBOL 0x00000005 -#define CBA_READ_MEMORY 0x00000006 -#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 -#define CBA_SET_OPTIONS 0x00000008 -#define CBA_EVENT 0x00000010 -#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020 -#define CBA_DEBUG_INFO 0x10000000 - -typedef struct _IMAGEHLP_CBA_READ_MEMORY { - DWORD64 addr; // address to read from - PVOID buf; // buffer to read to - DWORD bytes; // amount of bytes to read - DWORD *bytesread; // pointer to store amount of bytes read -} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; - -enum { - sevInfo = 0, - sevProblem, - sevAttn, - sevFatal, - sevMax // unused -}; - -typedef struct _IMAGEHLP_CBA_EVENT { - DWORD severity; // values from sevInfo to sevFatal - DWORD code; // numerical code IDs the error - PCHAR desc; // may contain a text description of the error - PVOID object; // value dependant upon the error code -} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT; - -typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64) - DWORD64 BaseOfImage; // base load address of module - DWORD CheckSum; // checksum from the pe header - DWORD TimeDateStamp; // date/time stamp from pe header - CHAR FileName[MAX_PATH]; // symbols file or image name - BOOLEAN Reparse; // load failure reparse - HANDLE hFile; // file handle, if passed - DWORD Flags; // -} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; - -#define DSLFLAG_MISMATCHED_PDB 0x1 -#define DSLFLAG_MISMATCHED_DBG 0x2 - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64 -#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 -#else -typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD) - DWORD BaseOfImage; // base load address of module - DWORD CheckSum; // checksum from the pe header - DWORD TimeDateStamp; // date/time stamp from pe header - CHAR FileName[MAX_PATH]; // symbols file or image name - BOOLEAN Reparse; // load failure reparse - HANDLE hFile; // file handle, if passed -} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; -#endif - -typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64) - DWORD NumberOfDups; // number of duplicates in the Symbol array - PIMAGEHLP_SYMBOL64 Symbol; // array of duplicate symbols - DWORD SelectedSymbol; // symbol selected (-1 to start) -} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64; - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64 -#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64 -#else -typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { - DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL) - DWORD NumberOfDups; // number of duplicates in the Symbol array - PIMAGEHLP_SYMBOL Symbol; // array of duplicate symbols - DWORD SelectedSymbol; // symbol selected (-1 to start) -} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; -#endif - -// If dbghelp ever needs to display graphical UI, it will use this as the parent window. - -BOOL -SymSetParentWindow( - HWND hwnd - ); - -// -// options that are set/returned by SymSetOptions() & SymGetOptions() -// these are used as a mask -// -#define SYMOPT_CASE_INSENSITIVE 0x00000001 -#define SYMOPT_UNDNAME 0x00000002 -#define SYMOPT_DEFERRED_LOADS 0x00000004 -#define SYMOPT_NO_CPP 0x00000008 -#define SYMOPT_LOAD_LINES 0x00000010 -#define SYMOPT_OMAP_FIND_NEAREST 0x00000020 -#define SYMOPT_LOAD_ANYTHING 0x00000040 -#define SYMOPT_IGNORE_CVREC 0x00000080 -#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 -#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 -#define SYMOPT_EXACT_SYMBOLS 0x00000400 -#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 -#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 -#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 -#define SYMOPT_PUBLICS_ONLY 0x00004000 -#define SYMOPT_NO_PUBLICS 0x00008000 -#define SYMOPT_AUTO_PUBLICS 0x00010000 -#define SYMOPT_NO_IMAGE_SEARCH 0x00020000 -#define SYMOPT_SECURE 0x00040000 - -#define SYMOPT_DEBUG 0x80000000 - -DWORD -IMAGEAPI -SymSetOptions( - IN DWORD SymOptions - ); - -DWORD -IMAGEAPI -SymGetOptions( - VOID - ); - -BOOL -IMAGEAPI -SymCleanup( - IN HANDLE hProcess - ); - -BOOL -IMAGEAPI -SymMatchString( - IN LPSTR string, - IN LPSTR expression, - IN BOOL fCase - ); - -typedef BOOL -(CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)( - PSOURCEFILE pSourceFile, - PVOID UserContext - ); - -BOOL -IMAGEAPI -SymEnumSourceFiles( - IN HANDLE hProcess, - IN ULONG64 ModBase, - IN LPSTR Mask, - IN PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles, - IN PVOID UserContext - ); - -BOOL -IMAGEAPI -SymEnumerateModules64( - IN HANDLE hProcess, - IN PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, - IN PVOID UserContext - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymEnumerateModules SymEnumerateModules64 -#else -BOOL -IMAGEAPI -SymEnumerateModules( - IN HANDLE hProcess, - IN PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, - IN PVOID UserContext - ); -#endif - -BOOL -IMAGEAPI -SymEnumerateSymbols64( - IN HANDLE hProcess, - IN DWORD64 BaseOfDll, - IN PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, - IN PVOID UserContext - ); - -BOOL -IMAGEAPI -SymEnumerateSymbolsW64( - IN HANDLE hProcess, - IN DWORD64 BaseOfDll, - IN PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback, - IN PVOID UserContext - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymEnumerateSymbols SymEnumerateSymbols64 -#define SymEnumerateSymbolsW SymEnumerateSymbolsW64 -#else -BOOL -IMAGEAPI -SymEnumerateSymbols( - IN HANDLE hProcess, - IN DWORD BaseOfDll, - IN PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, - IN PVOID UserContext - ); - -BOOL -IMAGEAPI -SymEnumerateSymbolsW( - IN HANDLE hProcess, - IN DWORD BaseOfDll, - IN PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, - IN PVOID UserContext - ); -#endif - -BOOL -IMAGEAPI -EnumerateLoadedModules64( - IN HANDLE hProcess, - IN PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback, - IN PVOID UserContext - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define EnumerateLoadedModules EnumerateLoadedModules64 -#else -BOOL -IMAGEAPI -EnumerateLoadedModules( - IN HANDLE hProcess, - IN PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback, - IN PVOID UserContext - ); -#endif - -PVOID -IMAGEAPI -SymFunctionTableAccess64( - HANDLE hProcess, - DWORD64 AddrBase - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymFunctionTableAccess SymFunctionTableAccess64 -#else -PVOID -IMAGEAPI -SymFunctionTableAccess( - HANDLE hProcess, - DWORD AddrBase - ); -#endif - -BOOL -IMAGEAPI -SymGetModuleInfo64( - IN HANDLE hProcess, - IN DWORD64 qwAddr, - OUT PIMAGEHLP_MODULE64 ModuleInfo - ); - -BOOL -IMAGEAPI -SymGetModuleInfoW64( - IN HANDLE hProcess, - IN DWORD64 qwAddr, - OUT PIMAGEHLP_MODULEW64 ModuleInfo - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetModuleInfo SymGetModuleInfo64 -#define SymGetModuleInfoW SymGetModuleInfoW64 -#else -BOOL -IMAGEAPI -SymGetModuleInfo( - IN HANDLE hProcess, - IN DWORD dwAddr, - OUT PIMAGEHLP_MODULE ModuleInfo - ); - -BOOL -IMAGEAPI -SymGetModuleInfoW( - IN HANDLE hProcess, - IN DWORD dwAddr, - OUT PIMAGEHLP_MODULEW ModuleInfo - ); -#endif - -DWORD64 -IMAGEAPI -SymGetModuleBase64( - IN HANDLE hProcess, - IN DWORD64 qwAddr - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetModuleBase SymGetModuleBase64 -#else -DWORD -IMAGEAPI -SymGetModuleBase( - IN HANDLE hProcess, - IN DWORD dwAddr - ); -#endif - -BOOL -IMAGEAPI -SymGetSymNext64( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_SYMBOL64 Symbol - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetSymNext SymGetSymNext64 -#else -BOOL -IMAGEAPI -SymGetSymNext( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_SYMBOL Symbol - ); -#endif - -BOOL -IMAGEAPI -SymGetSymPrev64( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_SYMBOL64 Symbol - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetSymPrev SymGetSymPrev64 -#else -BOOL -IMAGEAPI -SymGetSymPrev( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_SYMBOL Symbol - ); -#endif - -BOOL -IMAGEAPI -SymGetLineFromAddr64( - IN HANDLE hProcess, - IN DWORD64 qwAddr, - OUT PDWORD pdwDisplacement, - OUT PIMAGEHLP_LINE64 Line64 - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetLineFromAddr SymGetLineFromAddr64 -#else -BOOL -IMAGEAPI -SymGetLineFromAddr( - IN HANDLE hProcess, - IN DWORD dwAddr, - OUT PDWORD pdwDisplacement, - OUT PIMAGEHLP_LINE Line - ); -#endif - -BOOL -IMAGEAPI -SymGetLineFromName64( - IN HANDLE hProcess, - IN PSTR ModuleName, - IN PSTR FileName, - IN DWORD dwLineNumber, - OUT PLONG plDisplacement, - IN OUT PIMAGEHLP_LINE64 Line - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetLineFromName SymGetLineFromName64 -#else -BOOL -IMAGEAPI -SymGetLineFromName( - IN HANDLE hProcess, - IN PSTR ModuleName, - IN PSTR FileName, - IN DWORD dwLineNumber, - OUT PLONG plDisplacement, - IN OUT PIMAGEHLP_LINE Line - ); -#endif - -BOOL -IMAGEAPI -SymGetLineNext64( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_LINE64 Line - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetLineNext SymGetLineNext64 -#else -BOOL -IMAGEAPI -SymGetLineNext( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_LINE Line - ); -#endif - -BOOL -IMAGEAPI -SymGetLinePrev64( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_LINE64 Line - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetLinePrev SymGetLinePrev64 -#else -BOOL -IMAGEAPI -SymGetLinePrev( - IN HANDLE hProcess, - IN OUT PIMAGEHLP_LINE Line - ); -#endif - -BOOL -IMAGEAPI -SymMatchFileName( - IN PSTR FileName, - IN PSTR Match, - OUT PSTR *FileNameStop, - OUT PSTR *MatchStop - ); - -BOOL -IMAGEAPI -SymInitialize( - IN HANDLE hProcess, - IN PSTR UserSearchPath, - IN BOOL fInvadeProcess - ); - -BOOL -IMAGEAPI -SymGetSearchPath( - IN HANDLE hProcess, - OUT PSTR SearchPath, - IN DWORD SearchPathLength - ); - -BOOL -IMAGEAPI -SymSetSearchPath( - IN HANDLE hProcess, - IN PSTR SearchPath - ); - -DWORD64 -IMAGEAPI -SymLoadModule64( - IN HANDLE hProcess, - IN HANDLE hFile, - IN PSTR ImageName, - IN PSTR ModuleName, - IN DWORD64 BaseOfDll, - IN DWORD SizeOfDll - ); - -#define SLMFLAG_VIRTUAL 0x1 - -DWORD64 -IMAGEAPI -SymLoadModuleEx( - IN HANDLE hProcess, - IN HANDLE hFile, - IN PSTR ImageName, - IN PSTR ModuleName, - IN DWORD64 BaseOfDll, - IN DWORD DllSize, - IN PMODLOAD_DATA Data, - IN DWORD Flags - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymLoadModule SymLoadModule64 -#else -DWORD -IMAGEAPI -SymLoadModule( - IN HANDLE hProcess, - IN HANDLE hFile, - IN PSTR ImageName, - IN PSTR ModuleName, - IN DWORD BaseOfDll, - IN DWORD SizeOfDll - ); -#endif - -BOOL -IMAGEAPI -SymUnloadModule64( - IN HANDLE hProcess, - IN DWORD64 BaseOfDll - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymUnloadModule SymUnloadModule64 -#else -BOOL -IMAGEAPI -SymUnloadModule( - IN HANDLE hProcess, - IN DWORD BaseOfDll - ); -#endif - -BOOL -IMAGEAPI -SymUnDName64( - IN PIMAGEHLP_SYMBOL64 sym, // Symbol to undecorate - OUT PSTR UnDecName, // Buffer to store undecorated name in - IN DWORD UnDecNameLength // Size of the buffer - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymUnDName SymUnDName64 -#else -BOOL -IMAGEAPI -SymUnDName( - IN PIMAGEHLP_SYMBOL sym, // Symbol to undecorate - OUT PSTR UnDecName, // Buffer to store undecorated name in - IN DWORD UnDecNameLength // Size of the buffer - ); -#endif - -BOOL -IMAGEAPI -SymRegisterCallback64( - IN HANDLE hProcess, - IN PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, - IN ULONG64 UserContext - ); - -BOOL -IMAGEAPI -SymRegisterFunctionEntryCallback64( - IN HANDLE hProcess, - IN PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction, - IN ULONG64 UserContext - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymRegisterCallback SymRegisterCallback64 -#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64 -#else -BOOL -IMAGEAPI -SymRegisterCallback( - IN HANDLE hProcess, - IN PSYMBOL_REGISTERED_CALLBACK CallbackFunction, - IN PVOID UserContext - ); - -BOOL -IMAGEAPI -SymRegisterFunctionEntryCallback( - IN HANDLE hProcess, - IN PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction, - IN PVOID UserContext - ); -#endif - - -typedef struct _IMAGEHLP_SYMBOL_SRC { - DWORD sizeofstruct; - DWORD type; - char file[MAX_PATH]; -} IMAGEHLP_SYMBOL_SRC, *PIMAGEHLP_SYMBOL_SRC; - -typedef struct _MODULE_TYPE_INFO { // AKA TYPTYP - USHORT dataLength; - USHORT leaf; - BYTE data[1]; -} MODULE_TYPE_INFO, *PMODULE_TYPE_INFO; - -typedef struct _SYMBOL_INFO { - ULONG SizeOfStruct; - ULONG TypeIndex; // Type Index of symbol - ULONG64 Reserved[2]; - ULONG info; - ULONG Size; - ULONG64 ModBase; // Base Address of module comtaining this symbol - ULONG Flags; - ULONG64 Value; // Value of symbol, ValuePresent should be 1 - ULONG64 Address; // Address of symbol including base address of module - ULONG Register; // register holding value or pointer to value - ULONG Scope; // scope of the symbol - ULONG Tag; // pdb classification - ULONG NameLen; // Actual length of name - ULONG MaxNameLen; - CHAR Name[1]; // Name of symbol -} SYMBOL_INFO, *PSYMBOL_INFO; - -typedef struct _SYMBOL_INFO_PACKAGE { - SYMBOL_INFO si; - CHAR name[MAX_SYM_NAME + 1]; -} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE; - -typedef struct _IMAGEHLP_STACK_FRAME -{ - ULONG64 InstructionOffset; - ULONG64 ReturnOffset; - ULONG64 FrameOffset; - ULONG64 StackOffset; - ULONG64 BackingStoreOffset; - ULONG64 FuncTableEntry; - ULONG64 Params[4]; - ULONG64 Reserved[5]; - BOOL Virtual; - ULONG Reserved2; -} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; - -typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; - - -BOOL -IMAGEAPI -SymSetContext( - HANDLE hProcess, - PIMAGEHLP_STACK_FRAME StackFrame, - PIMAGEHLP_CONTEXT Context - ); - -BOOL -IMAGEAPI -SymFromAddr( - IN HANDLE hProcess, - IN DWORD64 Address, - OUT PDWORD64 Displacement, - IN OUT PSYMBOL_INFO Symbol - ); - -// While SymFromName will provide a symbol from a name, -// SymEnumSymbols can provide the same matching information -// for ALL symbols with a matching name, even regular -// expressions. That way you can search across modules -// and differentiate between identically named symbols. - -BOOL -IMAGEAPI -SymFromName( - IN HANDLE hProcess, - IN LPSTR Name, - OUT PSYMBOL_INFO Symbol - ); - -typedef BOOL -(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)( - PSYMBOL_INFO pSymInfo, - ULONG SymbolSize, - PVOID UserContext - ); - -BOOL -IMAGEAPI -SymEnumSymbols( - IN HANDLE hProcess, - IN ULONG64 BaseOfDll, - IN PCSTR Mask, - IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, - IN PVOID UserContext - ); - -BOOL -IMAGEAPI -SymEnumSymbolsForAddr( - IN HANDLE hProcess, - IN DWORD64 Address, - IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, - IN PVOID UserContext - ); - -typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { - TI_GET_SYMTAG, - TI_GET_SYMNAME, - TI_GET_LENGTH, - TI_GET_TYPE, - TI_GET_TYPEID, - TI_GET_BASETYPE, - TI_GET_ARRAYINDEXTYPEID, - TI_FINDCHILDREN, - TI_GET_DATAKIND, - TI_GET_ADDRESSOFFSET, - TI_GET_OFFSET, - TI_GET_VALUE, - TI_GET_COUNT, - TI_GET_CHILDRENCOUNT, - TI_GET_BITPOSITION, - TI_GET_VIRTUALBASECLASS, - TI_GET_VIRTUALTABLESHAPEID, - TI_GET_VIRTUALBASEPOINTEROFFSET, - TI_GET_CLASSPARENTID, - TI_GET_NESTED, - TI_GET_SYMINDEX, - TI_GET_LEXICALPARENT, - TI_GET_ADDRESS, - TI_GET_THISADJUST, - TI_GET_UDTKIND, - TI_IS_EQUIV_TO, - TI_GET_CALLING_CONVENTION, -} IMAGEHLP_SYMBOL_TYPE_INFO; - -typedef struct _TI_FINDCHILDREN_PARAMS { - ULONG Count; - ULONG Start; - ULONG ChildId[1]; -} TI_FINDCHILDREN_PARAMS; - -BOOL -IMAGEAPI -SymGetTypeInfo( - IN HANDLE hProcess, - IN DWORD64 ModBase, - IN ULONG TypeId, - IN IMAGEHLP_SYMBOL_TYPE_INFO GetType, - OUT PVOID pInfo - ); - -BOOL -IMAGEAPI -SymEnumTypes( - IN HANDLE hProcess, - IN ULONG64 BaseOfDll, - IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, - IN PVOID UserContext - ); - -BOOL -IMAGEAPI -SymGetTypeFromName( - IN HANDLE hProcess, - IN ULONG64 BaseOfDll, - IN LPSTR Name, - OUT PSYMBOL_INFO Symbol - ); - -BOOL -IMAGEAPI -SymAddSymbol( - IN HANDLE hProcess, - IN ULONG64 BaseOfDll, - IN PCSTR Name, - IN DWORD64 Address, - IN DWORD Size, - IN DWORD Flags - ); - -BOOL -IMAGEAPI -SymDeleteSymbol( - IN HANDLE hProcess, - IN ULONG64 BaseOfDll, - IN PCSTR Name, - IN DWORD64 Address, - IN DWORD Flags - ); - -// -// Full user-mode dump creation. -// - -typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)( - DWORD DataType, - PVOID* Data, - LPDWORD DataLength, - PVOID UserData - ); - -BOOL -WINAPI -DbgHelpCreateUserDump( - IN LPSTR FileName, - IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, - IN PVOID UserData - ); - -BOOL -WINAPI -DbgHelpCreateUserDumpW( - IN LPWSTR FileName, - IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, - IN PVOID UserData - ); - -// ----------------------------------------------------------------- -// The following 4 legacy APIs are fully supported, but newer -// ones are recommended. SymFromName and SymFromAddr provide -// much more detailed info on the returned symbol. - -BOOL -IMAGEAPI -SymGetSymFromAddr64( - IN HANDLE hProcess, - IN DWORD64 qwAddr, - OUT PDWORD64 pdwDisplacement, - OUT PIMAGEHLP_SYMBOL64 Symbol - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetSymFromAddr SymGetSymFromAddr64 -#else -BOOL -IMAGEAPI -SymGetSymFromAddr( - IN HANDLE hProcess, - IN DWORD dwAddr, - OUT PDWORD pdwDisplacement, - OUT PIMAGEHLP_SYMBOL Symbol - ); -#endif - -// While following two APIs will provide a symbol from a name, -// SymEnumSymbols can provide the same matching information -// for ALL symbols with a matching name, even regular -// expressions. That way you can search across modules -// and differentiate between identically named symbols. - -BOOL -IMAGEAPI -SymGetSymFromName64( - IN HANDLE hProcess, - IN PSTR Name, - OUT PIMAGEHLP_SYMBOL64 Symbol - ); - -#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) -#define SymGetSymFromName SymGetSymFromName64 -#else -BOOL -IMAGEAPI -SymGetSymFromName( - IN HANDLE hProcess, - IN PSTR Name, - OUT PIMAGEHLP_SYMBOL Symbol - ); -#endif - - -// ----------------------------------------------------------------- -// The following APIs exist only for backwards compatibility -// with a pre-release version documented in an MSDN release. - -// You should use SymFindFileInPath if you want to maintain -// future compatibility. - -DBHLP_DEPRECIATED -BOOL -IMAGEAPI -FindFileInPath( - HANDLE hprocess, - LPSTR SearchPath, - LPSTR FileName, - PVOID id, - DWORD two, - DWORD three, - DWORD flags, - LPSTR FilePath - ); - -// You should use SymFindFileInPath if you want to maintain -// future compatibility. - -DBHLP_DEPRECIATED -BOOL -IMAGEAPI -FindFileInSearchPath( - HANDLE hprocess, - LPSTR SearchPath, - LPSTR FileName, - DWORD one, - DWORD two, - DWORD three, - LPSTR FilePath - ); - -DBHLP_DEPRECIATED -BOOL -IMAGEAPI -SymEnumSym( - IN HANDLE hProcess, - IN ULONG64 BaseOfDll, - IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, - IN PVOID UserContext - ); - -// These values should not be used. -// They have been replaced by SYMFLAG_ values. - -#define SYMF_OMAP_GENERATED 0x00000001 -#define SYMF_OMAP_MODIFIED 0x00000002 -#define SYMF_REGISTER 0x00000008 -#define SYMF_REGREL 0x00000010 -#define SYMF_FRAMEREL 0x00000020 -#define SYMF_PARAMETER 0x00000040 -#define SYMF_LOCAL 0x00000080 -#define SYMF_CONSTANT 0x00000100 -#define SYMF_EXPORT 0x00000200 -#define SYMF_FORWARDER 0x00000400 -#define SYMF_FUNCTION 0x00000800 -#define SYMF_VIRTUAL 0x00001000 -#define SYMF_THUNK 0x00002000 -#define SYMF_TLSREL 0x00004000 - -// These values should also not be used. -// They have been replaced by SYMFLAG_ values. - -#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 -#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER // 0x0008 -#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL // 0x0010 -#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL // 0x0020 -#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER // 0x0040 -#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL // 0x0080 -#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT // 0x0100 -#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION // 0x0800 -#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL // 0x1000 -#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK // 0x2000 -#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL // 0x4000 - - -#include - -#pragma warning(disable:4200) // Zero length array - - -#define MINIDUMP_SIGNATURE ('PMDM') -#define MINIDUMP_VERSION (42899) -typedef DWORD RVA; -typedef ULONG64 RVA64; - -typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { - ULONG32 DataSize; - RVA Rva; -} MINIDUMP_LOCATION_DESCRIPTOR; - -typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { - ULONG64 DataSize; - RVA64 Rva; -} MINIDUMP_LOCATION_DESCRIPTOR64; - - -typedef struct _MINIDUMP_MEMORY_DESCRIPTOR { - ULONG64 StartOfMemoryRange; - MINIDUMP_LOCATION_DESCRIPTOR Memory; -} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR; - -// DESCRIPTOR64 is used for full-memory minidumps where -// all of the raw memory is laid out sequentially at the -// end of the dump. There is no need for individual RVAs -// as the RVA is the base RVA plus the sum of the preceeding -// data blocks. -typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 { - ULONG64 StartOfMemoryRange; - ULONG64 DataSize; -} MINIDUMP_MEMORY_DESCRIPTOR64, *PMINIDUMP_MEMORY_DESCRIPTOR64; - - -typedef struct _MINIDUMP_HEADER { - ULONG32 Signature; - ULONG32 Version; - ULONG32 NumberOfStreams; - RVA StreamDirectoryRva; - ULONG32 CheckSum; - union { - ULONG32 Reserved; - ULONG32 TimeDateStamp; - }; - ULONG64 Flags; -} MINIDUMP_HEADER, *PMINIDUMP_HEADER; - -// -// The MINIDUMP_HEADER field StreamDirectoryRva points to -// an array of MINIDUMP_DIRECTORY structures. -// - -typedef struct _MINIDUMP_DIRECTORY { - ULONG32 StreamType; - MINIDUMP_LOCATION_DESCRIPTOR Location; -} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY; - - -typedef struct _MINIDUMP_STRING { - ULONG32 Length; // Length in bytes of the string - WCHAR Buffer [0]; // Variable size buffer -} MINIDUMP_STRING, *PMINIDUMP_STRING; - - - -// -// The MINIDUMP_DIRECTORY field StreamType may be one of the following types. -// Types will be added in the future, so if a program reading the minidump -// header encounters a stream type it does not understand it should ignore -// the data altogether. Any tag above LastReservedStream will not be used by -// the system and is reserved for program-specific information. -// - -typedef enum _MINIDUMP_STREAM_TYPE { - - UnusedStream = 0, - ReservedStream0 = 1, - ReservedStream1 = 2, - ThreadListStream = 3, - ModuleListStream = 4, - MemoryListStream = 5, - ExceptionStream = 6, - SystemInfoStream = 7, - ThreadExListStream = 8, - Memory64ListStream = 9, - CommentStreamA = 10, - CommentStreamW = 11, - HandleDataStream = 12, - FunctionTableStream = 13, - UnloadedModuleListStream = 14, - MiscInfoStream = 15, - - LastReservedStream = 0xffff - -} MINIDUMP_STREAM_TYPE; - - -// -// The minidump system information contains processor and -// Operating System specific information. -// - -#pragma warning(push) -#pragma warning(disable:4201) /* Nameless struct/union */ - -typedef struct _MINIDUMP_SYSTEM_INFO { - - // - // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all - // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ). - // - - USHORT ProcessorArchitecture; - USHORT ProcessorLevel; - USHORT ProcessorRevision; - - union { - USHORT Reserved0; - struct { - UCHAR NumberOfProcessors; - UCHAR ProductType; - }; - }; - - // - // MajorVersion, MinorVersion, BuildNumber, PlatformId and - // CSDVersion are all taken from the OSVERSIONINFO structure - // returned by GetVersionEx( ). - // - - ULONG32 MajorVersion; - ULONG32 MinorVersion; - ULONG32 BuildNumber; - ULONG32 PlatformId; - - // - // RVA to a CSDVersion string in the string table. - // - - RVA CSDVersionRva; - - union { - ULONG32 Reserved1; - struct { - USHORT SuiteMask; - USHORT Reserved2; - }; - }; - - // - // CPU information is obtained from one of two places. - // - // 1) On x86 computers, CPU_INFORMATION is obtained from the CPUID - // instruction. You must use the X86 portion of the union for X86 - // computers. - // - // 2) On non-x86 architectures, CPU_INFORMATION is obtained by calling - // IsProcessorFeatureSupported(). - // - - union _CPU_INFORMATION { - - // - // X86 platforms use CPUID function to obtain processor information. - // - - struct { - - // - // CPUID Subfunction 0, register EAX (VendorId [0]), - // EBX (VendorId [1]) and ECX (VendorId [2]). - // - - ULONG32 VendorId [ 3 ]; - - // - // CPUID Subfunction 1, register EAX - // - - ULONG32 VersionInformation; - - // - // CPUID Subfunction 1, register EDX - // - - ULONG32 FeatureInformation; - - - // - // CPUID, Subfunction 80000001, register EBX. This will only - // be obtained if the vendor id is "AuthenticAMD". - // - - ULONG32 AMDExtendedCpuFeatures; - - } X86CpuInfo; - - // - // Non-x86 platforms use processor feature flags. - // - - struct { - - ULONG64 ProcessorFeatures [ 2 ]; - - } OtherCpuInfo; - - } Cpu; - -} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO; - -typedef union _CPU_INFORMATION CPU_INFORMATION, *PCPU_INFORMATION; - -#pragma warning(pop) - -// -// The minidump thread contains standard thread -// information plus an RVA to the memory for this -// thread and an RVA to the CONTEXT structure for -// this thread. -// - - -// -// ThreadId must be 4 bytes on all architectures. -// - -C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4); - -typedef struct _MINIDUMP_THREAD { - ULONG32 ThreadId; - ULONG32 SuspendCount; - ULONG32 PriorityClass; - ULONG32 Priority; - ULONG64 Teb; - MINIDUMP_MEMORY_DESCRIPTOR Stack; - MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; -} MINIDUMP_THREAD, *PMINIDUMP_THREAD; - -// -// The thread list is a container of threads. -// - -typedef struct _MINIDUMP_THREAD_LIST { - ULONG32 NumberOfThreads; - MINIDUMP_THREAD Threads [0]; -} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST; - - -typedef struct _MINIDUMP_THREAD_EX { - ULONG32 ThreadId; - ULONG32 SuspendCount; - ULONG32 PriorityClass; - ULONG32 Priority; - ULONG64 Teb; - MINIDUMP_MEMORY_DESCRIPTOR Stack; - MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; - MINIDUMP_MEMORY_DESCRIPTOR BackingStore; -} MINIDUMP_THREAD_EX, *PMINIDUMP_THREAD_EX; - -// -// The thread list is a container of threads. -// - -typedef struct _MINIDUMP_THREAD_EX_LIST { - ULONG32 NumberOfThreads; - MINIDUMP_THREAD_EX Threads [0]; -} MINIDUMP_THREAD_EX_LIST, *PMINIDUMP_THREAD_EX_LIST; - - -// -// The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64. -// - -typedef struct _MINIDUMP_EXCEPTION { - ULONG32 ExceptionCode; - ULONG32 ExceptionFlags; - ULONG64 ExceptionRecord; - ULONG64 ExceptionAddress; - ULONG32 NumberParameters; - ULONG32 __unusedAlignment; - ULONG64 ExceptionInformation [ EXCEPTION_MAXIMUM_PARAMETERS ]; -} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION; - - -// -// The exception information stream contains the id of the thread that caused -// the exception (ThreadId), the exception record for the exception -// (ExceptionRecord) and an RVA to the thread context where the exception -// occured. -// - -typedef struct MINIDUMP_EXCEPTION_STREAM { - ULONG32 ThreadId; - ULONG32 __alignment; - MINIDUMP_EXCEPTION ExceptionRecord; - MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; -} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM; - - -// -// The MINIDUMP_MODULE contains information about a -// a specific module. It includes the CheckSum and -// the TimeDateStamp for the module so the module -// can be reloaded during the analysis phase. -// - -typedef struct _MINIDUMP_MODULE { - ULONG64 BaseOfImage; - ULONG32 SizeOfImage; - ULONG32 CheckSum; - ULONG32 TimeDateStamp; - RVA ModuleNameRva; - VS_FIXEDFILEINFO VersionInfo; - MINIDUMP_LOCATION_DESCRIPTOR CvRecord; - MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; - ULONG64 Reserved0; // Reserved for future use. - ULONG64 Reserved1; // Reserved for future use. -} MINIDUMP_MODULE, *PMINIDUMP_MODULE; - - -// -// The minidump module list is a container for modules. -// - -typedef struct _MINIDUMP_MODULE_LIST { - ULONG32 NumberOfModules; - MINIDUMP_MODULE Modules [ 0 ]; -} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST; - - -// -// Memory Ranges -// - -typedef struct _MINIDUMP_MEMORY_LIST { - ULONG32 NumberOfMemoryRanges; - MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges [0]; -} MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST; - -typedef struct _MINIDUMP_MEMORY64_LIST { - ULONG64 NumberOfMemoryRanges; - RVA64 BaseRva; - MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges [0]; -} MINIDUMP_MEMORY64_LIST, *PMINIDUMP_MEMORY64_LIST; - - -// -// Support for user supplied exception information. -// - -typedef struct _MINIDUMP_EXCEPTION_INFORMATION { - DWORD ThreadId; - PEXCEPTION_POINTERS ExceptionPointers; - BOOL ClientPointers; -} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION; - - -// -// Support for capturing system handle state at the time of the dump. -// - -typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { - ULONG64 Handle; - RVA TypeNameRva; - RVA ObjectNameRva; - ULONG32 Attributes; - ULONG32 GrantedAccess; - ULONG32 HandleCount; - ULONG32 PointerCount; -} MINIDUMP_HANDLE_DESCRIPTOR, *PMINIDUMP_HANDLE_DESCRIPTOR; - -typedef struct _MINIDUMP_HANDLE_DATA_STREAM { - ULONG32 SizeOfHeader; - ULONG32 SizeOfDescriptor; - ULONG32 NumberOfDescriptors; - ULONG32 Reserved; -} MINIDUMP_HANDLE_DATA_STREAM, *PMINIDUMP_HANDLE_DATA_STREAM; - - -// -// Support for capturing dynamic function table state at the time of the dump. -// - -typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR { - ULONG64 MinimumAddress; - ULONG64 MaximumAddress; - ULONG64 BaseAddress; - ULONG32 EntryCount; - ULONG32 SizeOfAlignPad; -} MINIDUMP_FUNCTION_TABLE_DESCRIPTOR, *PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; - -typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM { - ULONG32 SizeOfHeader; - ULONG32 SizeOfDescriptor; - ULONG32 SizeOfNativeDescriptor; - ULONG32 SizeOfFunctionEntry; - ULONG32 NumberOfDescriptors; - ULONG32 SizeOfAlignPad; -} MINIDUMP_FUNCTION_TABLE_STREAM, *PMINIDUMP_FUNCTION_TABLE_STREAM; - - -// -// The MINIDUMP_UNLOADED_MODULE contains information about a -// a specific module that was previously loaded but no -// longer is. This can help with diagnosing problems where -// callers attempt to call code that is no longer loaded. -// - -typedef struct _MINIDUMP_UNLOADED_MODULE { - ULONG64 BaseOfImage; - ULONG32 SizeOfImage; - ULONG32 CheckSum; - ULONG32 TimeDateStamp; - RVA ModuleNameRva; -} MINIDUMP_UNLOADED_MODULE, *PMINIDUMP_UNLOADED_MODULE; - - -// -// The minidump unloaded module list is a container for unloaded modules. -// - -typedef struct _MINIDUMP_UNLOADED_MODULE_LIST { - ULONG32 SizeOfHeader; - ULONG32 SizeOfEntry; - ULONG32 NumberOfEntries; -} MINIDUMP_UNLOADED_MODULE_LIST, *PMINIDUMP_UNLOADED_MODULE_LIST; - - -// -// The miscellaneous information stream contains a variety -// of small pieces of information. A member is valid if -// it's within the available size and its corresponding -// bit is set. -// - -#define MINIDUMP_MISC1_PROCESS_ID 0x00000001 -#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002 - -typedef struct _MINIDUMP_MISC_INFO { - ULONG32 SizeOfInfo; - ULONG32 Flags1; - ULONG32 ProcessId; - ULONG32 ProcessCreateTime; - ULONG32 ProcessUserTime; - ULONG32 ProcessKernelTime; -} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO; - - -// -// Support for arbitrary user-defined information. -// - -typedef struct _MINIDUMP_USER_RECORD { - ULONG32 Type; - MINIDUMP_LOCATION_DESCRIPTOR Memory; -} MINIDUMP_USER_RECORD, *PMINIDUMP_USER_RECORD; - - -typedef struct _MINIDUMP_USER_STREAM { - ULONG32 Type; - ULONG BufferSize; - PVOID Buffer; - -} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM; - - -typedef struct _MINIDUMP_USER_STREAM_INFORMATION { - ULONG UserStreamCount; - PMINIDUMP_USER_STREAM UserStreamArray; -} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION; - -// -// Callback support. -// - -typedef enum _MINIDUMP_CALLBACK_TYPE { - ModuleCallback, - ThreadCallback, - ThreadExCallback, - IncludeThreadCallback, - IncludeModuleCallback, -} MINIDUMP_CALLBACK_TYPE; - - -typedef struct _MINIDUMP_THREAD_CALLBACK { - ULONG ThreadId; - HANDLE ThreadHandle; - CONTEXT Context; - ULONG SizeOfContext; - ULONG64 StackBase; - ULONG64 StackEnd; -} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; - - -typedef struct _MINIDUMP_THREAD_EX_CALLBACK { - ULONG ThreadId; - HANDLE ThreadHandle; - CONTEXT Context; - ULONG SizeOfContext; - ULONG64 StackBase; - ULONG64 StackEnd; - ULONG64 BackingStoreBase; - ULONG64 BackingStoreEnd; -} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK; - - -typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { - ULONG ThreadId; -} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; - - -typedef enum _THREAD_WRITE_FLAGS { - ThreadWriteThread = 0x0001, - ThreadWriteStack = 0x0002, - ThreadWriteContext = 0x0004, - ThreadWriteBackingStore = 0x0008, - ThreadWriteInstructionWindow = 0x0010, - ThreadWriteThreadData = 0x0020, -} THREAD_WRITE_FLAGS; - -typedef struct _MINIDUMP_MODULE_CALLBACK { - PWCHAR FullPath; - ULONG64 BaseOfImage; - ULONG SizeOfImage; - ULONG CheckSum; - ULONG TimeDateStamp; - VS_FIXEDFILEINFO VersionInfo; - PVOID CvRecord; - ULONG SizeOfCvRecord; - PVOID MiscRecord; - ULONG SizeOfMiscRecord; -} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK; - - -typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { - ULONG64 BaseOfImage; -} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; - - -typedef enum _MODULE_WRITE_FLAGS { - ModuleWriteModule = 0x0001, - ModuleWriteDataSeg = 0x0002, - ModuleWriteMiscRecord = 0x0004, - ModuleWriteCvRecord = 0x0008, - ModuleReferencedByMemory = 0x0010 -} MODULE_WRITE_FLAGS; - - -typedef struct _MINIDUMP_CALLBACK_INPUT { - ULONG ProcessId; - HANDLE ProcessHandle; - ULONG CallbackType; - union { - MINIDUMP_THREAD_CALLBACK Thread; - MINIDUMP_THREAD_EX_CALLBACK ThreadEx; - MINIDUMP_MODULE_CALLBACK Module; - MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; - MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; - }; -} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; - -typedef struct _MINIDUMP_CALLBACK_OUTPUT { - union { - ULONG ModuleWriteFlags; - ULONG ThreadWriteFlags; - }; -} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; - - -// -// A normal minidump contains just the information -// necessary to capture stack traces for all of the -// existing threads in a process. -// -// A minidump with data segments includes all of the data -// sections from loaded modules in order to capture -// global variable contents. This can make the dump much -// larger if many modules have global data. -// -// A minidump with full memory includes all of the accessible -// memory in the process and can be very large. A minidump -// with full memory always has the raw memory data at the end -// of the dump so that the initial structures in the dump can -// be mapped directly without having to include the raw -// memory information. -// -// Stack and backing store memory can be filtered to remove -// data unnecessary for stack walking. This can improve -// compression of stacks and also deletes data that may -// be private and should not be stored in a dump. -// Memory can also be scanned to see what modules are -// referenced by stack and backing store memory to allow -// omission of other modules to reduce dump size. -// In either of these modes the ModuleReferencedByMemory flag -// is set for all modules referenced before the base -// module callbacks occur. -// -// On some operating systems a list of modules that were -// recently unloaded is kept in addition to the currently -// loaded module list. This information can be saved in -// the dump if desired. -// -// Stack and backing store memory can be scanned for referenced -// pages in order to pick up data referenced by locals or other -// stack memory. This can increase the size of a dump significantly. -// -// Module paths may contain undesired information such as user names -// or other important directory names so they can be stripped. This -// option reduces the ability to locate the proper image later -// and should only be used in certain situations. -// -// Complete operating system per-process and per-thread information can -// be gathered and stored in the dump. -// -// The virtual address space can be scanned for various types -// of memory to be included in the dump. -// - -typedef enum _MINIDUMP_TYPE { - MiniDumpNormal = 0x0000, - MiniDumpWithDataSegs = 0x0001, - MiniDumpWithFullMemory = 0x0002, - MiniDumpWithHandleData = 0x0004, - MiniDumpFilterMemory = 0x0008, - MiniDumpScanMemory = 0x0010, - MiniDumpWithUnloadedModules = 0x0020, - MiniDumpWithIndirectlyReferencedMemory = 0x0040, - MiniDumpFilterModulePaths = 0x0080, - MiniDumpWithProcessThreadData = 0x0100, - MiniDumpWithPrivateReadWriteMemory = 0x0200, -} MINIDUMP_TYPE; - - -// -// The minidump callback should modify the FieldsToWrite parameter to reflect -// what portions of the specified thread or module should be written to the -// file. -// - -typedef -BOOL -(WINAPI * MINIDUMP_CALLBACK_ROUTINE) ( - IN PVOID CallbackParam, - IN CONST PMINIDUMP_CALLBACK_INPUT CallbackInput, - IN OUT PMINIDUMP_CALLBACK_OUTPUT CallbackOutput - ); - -typedef struct _MINIDUMP_CALLBACK_INFORMATION { - MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; - PVOID CallbackParam; -} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; - - - -//++ -// -// PVOID -// RVA_TO_ADDR( -// PVOID Mapping, -// ULONG Rva -// ) -// -// Routine Description: -// -// Map an RVA that is contained within a mapped file to it's associated -// flat address. -// -// Arguments: -// -// Mapping - Base address of mapped file containing the RVA. -// -// Rva - An Rva to fixup. -// -// Return Values: -// -// A pointer to the desired data. -// -//-- - -#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva))) - -BOOL -WINAPI -MiniDumpWriteDump( - IN HANDLE hProcess, - IN DWORD ProcessId, - IN HANDLE hFile, - IN MINIDUMP_TYPE DumpType, - IN CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, OPTIONAL - IN CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, OPTIONAL - IN CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam OPTIONAL - ); - -BOOL -WINAPI -MiniDumpReadDumpStream( - IN PVOID BaseOfDump, - IN ULONG StreamNumber, - OUT PMINIDUMP_DIRECTORY * Dir, OPTIONAL - OUT PVOID * StreamPointer, OPTIONAL - OUT ULONG * StreamSize OPTIONAL - ); - -#include - -#ifdef __cplusplus -} -#endif - - -#endif // _DBGHELP_ +/*++ BUILD Version: 0000 Increment this if a change has global effects + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + dbghelp.h + +Abstract: + + This module defines the prototypes and constants required for the image + help routines. + + Contains debugging support routines that are redistributable. + +Revision History: + +--*/ + +#ifndef _DBGHELP_ +#define _DBGHELP_ + +#if _MSC_VER > 1020 +#pragma once +#endif + +#include + +#define NONGAMESPARTITIONS WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PKG_WER + +#pragma region Desktop Family or WER Package +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + + +// As a general principal always call the 64 bit version +// of every API, if a choice exists. The 64 bit version +// works great on 32 bit platforms, and is forward +// compatible to 64 bit platforms. + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +#ifdef _WIN64 +#ifndef _IMAGEHLP64 +#define _IMAGEHLP64 +#endif +#endif + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _IMAGEHLP_SOURCE_ + #define IMAGEAPI __stdcall + #define DBHLP_DEPRECIATED +#else + #define IMAGEAPI DECLSPEC_IMPORT __stdcall + #if (_MSC_VER >= 1300) && !defined(MIDL_PASS) + #define DBHLP_DEPRECIATED __declspec(deprecated) + #else + #define DBHLP_DEPRECIATED + #endif +#endif + +#define DBHLPAPI IMAGEAPI + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#define IMAGE_SEPARATION (64*1024) + +// Observant readers may notice that 2 new fields, +// 'fReadOnly' and 'Version' have been added to +// the LOADED_IMAGE structure after 'fDOSImage'. +// This does not change the size of the structure +// from previous headers. That is because while +// 'fDOSImage' is a byte, it is padded by the +// compiler to 4 bytes. So the 2 new fields are +// slipped into the extra space. + +typedef struct _LOADED_IMAGE { + PSTR ModuleName; + HANDLE hFile; + PUCHAR MappedAddress; +#ifdef _IMAGEHLP64 + PIMAGE_NT_HEADERS64 FileHeader; +#else + PIMAGE_NT_HEADERS32 FileHeader; +#endif + PIMAGE_SECTION_HEADER LastRvaSection; + ULONG NumberOfSections; + PIMAGE_SECTION_HEADER Sections; + ULONG Characteristics; + BOOLEAN fSystemImage; + BOOLEAN fDOSImage; + BOOLEAN fReadOnly; + UCHAR Version; + LIST_ENTRY Links; + ULONG SizeOfImage; +} LOADED_IMAGE, *PLOADED_IMAGE; + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +#define MAX_SYM_NAME 2000 + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + + +// Error codes set by dbghelp functions. Call GetLastError +// to see them. +// Dbghelp also sets error codes found in winerror.h + +#define ERROR_IMAGE_NOT_STRIPPED 0x8800 // the image is not stripped. No dbg file available. +#define ERROR_NO_DBG_POINTER 0x8801 // image is stripped but there is no pointer to a dbg file +#define ERROR_NO_PDB_POINTER 0x8802 // image does not point to a pdb file + +typedef BOOL +(CALLBACK *PFIND_DEBUG_FILE_CALLBACK)( + _In_ HANDLE FileHandle, + _In_ PCSTR FileName, + _In_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +SymFindDebugInfoFile( + _In_ HANDLE hProcess, + _In_ PCSTR FileName, + _Out_writes_(MAX_PATH + 1) PSTR DebugFilePath, + _In_opt_ PFIND_DEBUG_FILE_CALLBACK Callback, + _In_opt_ PVOID CallerData + ); + +typedef BOOL +(CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)( + _In_ HANDLE FileHandle, + _In_ PCWSTR FileName, + _In_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +SymFindDebugInfoFileW( + _In_ HANDLE hProcess, + _In_ PCWSTR FileName, + _Out_writes_(MAX_PATH + 1) PWSTR DebugFilePath, + _In_opt_ PFIND_DEBUG_FILE_CALLBACKW Callback, + _In_opt_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +FindDebugInfoFile ( + _In_ PCSTR FileName, + _In_ PCSTR SymbolPath, + _Out_writes_(MAX_PATH + 1) PSTR DebugFilePath + ); + +HANDLE +IMAGEAPI +FindDebugInfoFileEx ( + _In_ PCSTR FileName, + _In_ PCSTR SymbolPath, + _Out_writes_(MAX_PATH + 1) PSTR DebugFilePath, + _In_opt_ PFIND_DEBUG_FILE_CALLBACK Callback, + _In_opt_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +FindDebugInfoFileExW ( + _In_ PCWSTR FileName, + _In_ PCWSTR SymbolPath, + _Out_writes_(MAX_PATH + 1) PWSTR DebugFilePath, + _In_opt_ PFIND_DEBUG_FILE_CALLBACKW Callback, + _In_opt_ PVOID CallerData + ); + +typedef BOOL +(CALLBACK *PFINDFILEINPATHCALLBACK)( + _In_ PCSTR filename, + _In_ PVOID context + ); + +BOOL +IMAGEAPI +SymFindFileInPath( + _In_ HANDLE hprocess, + _In_opt_ PCSTR SearchPath, + _In_ PCSTR FileName, + _In_opt_ PVOID id, + _In_ DWORD two, + _In_ DWORD three, + _In_ DWORD flags, + _Out_writes_(MAX_PATH + 1) PSTR FoundFile, + _In_opt_ PFINDFILEINPATHCALLBACK callback, + _In_opt_ PVOID context + ); + +typedef BOOL +(CALLBACK *PFINDFILEINPATHCALLBACKW)( + _In_ PCWSTR filename, + _In_ PVOID context + ); + +BOOL +IMAGEAPI +SymFindFileInPathW( + _In_ HANDLE hprocess, + _In_opt_ PCWSTR SearchPath, + _In_ PCWSTR FileName, + _In_opt_ PVOID id, + _In_ DWORD two, + _In_ DWORD three, + _In_ DWORD flags, + _Out_writes_(MAX_PATH + 1) PWSTR FoundFile, + _In_opt_ PFINDFILEINPATHCALLBACKW callback, + _In_opt_ PVOID context + ); + +typedef BOOL +(CALLBACK *PFIND_EXE_FILE_CALLBACK)( + _In_ HANDLE FileHandle, + _In_ PCSTR FileName, + _In_opt_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +SymFindExecutableImage( + _In_ HANDLE hProcess, + _In_ PCSTR FileName, + _Out_writes_(MAX_PATH + 1) PSTR ImageFilePath, + _In_ PFIND_EXE_FILE_CALLBACK Callback, + _In_ PVOID CallerData + ); + +typedef BOOL +(CALLBACK *PFIND_EXE_FILE_CALLBACKW)( + _In_ HANDLE FileHandle, + _In_ PCWSTR FileName, + _In_opt_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +SymFindExecutableImageW( + _In_ HANDLE hProcess, + _In_ PCWSTR FileName, + _Out_writes_(MAX_PATH + 1) PWSTR ImageFilePath, + _In_ PFIND_EXE_FILE_CALLBACKW Callback, + _In_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +FindExecutableImage( + _In_ PCSTR FileName, + _In_ PCSTR SymbolPath, + _Out_writes_(MAX_PATH + 1) PSTR ImageFilePath + ); + +HANDLE +IMAGEAPI +FindExecutableImageEx( + _In_ PCSTR FileName, + _In_ PCSTR SymbolPath, + _Out_writes_(MAX_PATH + 1) PSTR ImageFilePath, + _In_opt_ PFIND_EXE_FILE_CALLBACK Callback, + _In_opt_ PVOID CallerData + ); + +HANDLE +IMAGEAPI +FindExecutableImageExW( + _In_ PCWSTR FileName, + _In_ PCWSTR SymbolPath, + _Out_writes_(MAX_PATH + 1) PWSTR ImageFilePath, + _In_opt_ PFIND_EXE_FILE_CALLBACKW Callback, + _In_ PVOID CallerData + ); + +PIMAGE_NT_HEADERS +IMAGEAPI +ImageNtHeader ( + _In_ PVOID Base + ); + +PVOID +IMAGEAPI +ImageDirectoryEntryToDataEx ( + _In_ PVOID Base, + _In_ BOOLEAN MappedAsImage, + _In_ USHORT DirectoryEntry, + _Out_ PULONG Size, + _Out_opt_ PIMAGE_SECTION_HEADER *FoundHeader + ); + +PVOID +IMAGEAPI +ImageDirectoryEntryToData ( + _In_ PVOID Base, + _In_ BOOLEAN MappedAsImage, + _In_ USHORT DirectoryEntry, + _Out_ PULONG Size + ); + +PIMAGE_SECTION_HEADER +IMAGEAPI +ImageRvaToSection( + _In_ PIMAGE_NT_HEADERS NtHeaders, + _In_ PVOID Base, + _In_ ULONG Rva + ); + +PVOID +IMAGEAPI +ImageRvaToVa( + _In_ PIMAGE_NT_HEADERS NtHeaders, + _In_ PVOID Base, + _In_ ULONG Rva, + _In_opt_ OUT PIMAGE_SECTION_HEADER *LastRvaSection + ); + +#ifndef _WIN64 +// This api won't be ported to Win64 - Fix your code. + +typedef struct _IMAGE_DEBUG_INFORMATION { + LIST_ENTRY List; + DWORD ReservedSize; + PVOID ReservedMappedBase; + USHORT ReservedMachine; + USHORT ReservedCharacteristics; + DWORD ReservedCheckSum; + DWORD ImageBase; + DWORD SizeOfImage; + + DWORD ReservedNumberOfSections; + PIMAGE_SECTION_HEADER ReservedSections; + + DWORD ReservedExportedNamesSize; + PSTR ReservedExportedNames; + + DWORD ReservedNumberOfFunctionTableEntries; + PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; + DWORD ReservedLowestFunctionStartingAddress; + DWORD ReservedHighestFunctionEndingAddress; + + DWORD ReservedNumberOfFpoTableEntries; + PFPO_DATA ReservedFpoTableEntries; + + DWORD SizeOfCoffSymbols; + PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; + + DWORD ReservedSizeOfCodeViewSymbols; + PVOID ReservedCodeViewSymbols; + + PSTR ImageFilePath; + PSTR ImageFileName; + PSTR ReservedDebugFilePath; + + DWORD ReservedTimeDateStamp; + + BOOL ReservedRomImage; + PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; + DWORD ReservedNumberOfDebugDirectories; + + DWORD ReservedOriginalFunctionTableBaseAddress; + + DWORD Reserved[ 2 ]; + +} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; + + +PIMAGE_DEBUG_INFORMATION +IMAGEAPI +MapDebugInformation( + _In_opt_ HANDLE FileHandle, + _In_ PCSTR FileName, + _In_opt_ PCSTR SymbolPath, + _In_ ULONG ImageBase + ); + +BOOL +IMAGEAPI +UnmapDebugInformation( + _Out_writes_(_Inexpressible_(unknown)) PIMAGE_DEBUG_INFORMATION DebugInfo + ); + +#endif + +BOOL +IMAGEAPI +SearchTreeForFile( + _In_ PCSTR RootPath, + _In_ PCSTR InputPathName, + _Out_writes_(MAX_PATH + 1) PSTR OutputPathBuffer + ); + +BOOL +IMAGEAPI +SearchTreeForFileW( + _In_ PCWSTR RootPath, + _In_ PCWSTR InputPathName, + _Out_writes_(MAX_PATH + 1) PWSTR OutputPathBuffer + ); + +typedef BOOL +(CALLBACK *PENUMDIRTREE_CALLBACK)( + _In_ PCSTR FilePath, + _In_opt_ PVOID CallerData + ); + +BOOL +IMAGEAPI +EnumDirTree( + _In_opt_ HANDLE hProcess, + _In_ PCSTR RootPath, + _In_ PCSTR InputPathName, + _Out_writes_opt_(MAX_PATH + 1) PSTR OutputPathBuffer, + _In_opt_ PENUMDIRTREE_CALLBACK cb, + _In_opt_ PVOID data + ); + +typedef BOOL +(CALLBACK *PENUMDIRTREE_CALLBACKW)( + _In_ PCWSTR FilePath, + _In_opt_ PVOID CallerData + ); + +BOOL +IMAGEAPI +EnumDirTreeW( + _In_opt_ HANDLE hProcess, + _In_ PCWSTR RootPath, + _In_ PCWSTR InputPathName, + _Out_writes_opt_(MAX_PATH + 1) PWSTR OutputPathBuffer, + _In_opt_ PENUMDIRTREE_CALLBACKW cb, + _In_opt_ PVOID data + ); + +BOOL +IMAGEAPI +MakeSureDirectoryPathExists( + _In_ PCSTR DirPath + ); + +// +// UnDecorateSymbolName Flags +// + +#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration +#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) // Remove leading underscores from MS extended keywords +#define UNDNAME_NO_MS_KEYWORDS (0x0002) // Disable expansion of MS extended keywords +#define UNDNAME_NO_FUNCTION_RETURNS (0x0004) // Disable expansion of return type for primary declaration +#define UNDNAME_NO_ALLOCATION_MODEL (0x0008) // Disable expansion of the declaration model +#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) // Disable expansion of the declaration language specifier +#define UNDNAME_NO_MS_THISTYPE (0x0020) // NYI Disable expansion of MS keywords on the 'this' type for primary declaration +#define UNDNAME_NO_CV_THISTYPE (0x0040) // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration +#define UNDNAME_NO_THISTYPE (0x0060) // Disable all modifiers on the 'this' type +#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) // Disable expansion of access specifiers for members +#define UNDNAME_NO_THROW_SIGNATURES (0x0100) // Disable expansion of 'throw-signatures' for functions and pointers to functions +#define UNDNAME_NO_MEMBER_TYPE (0x0200) // Disable expansion of 'static' or 'virtual'ness of members +#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) // Disable expansion of MS model for UDT returns +#define UNDNAME_32_BIT_DECODE (0x0800) // Undecorate 32-bit decorated names +#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for primary declaration; + // return just [scope::]name. Does expand template params +#define UNDNAME_NO_ARGUMENTS (0x2000) // Don't undecorate arguments to function +#define UNDNAME_NO_SPECIAL_SYMS (0x4000) // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc) + +DWORD +IMAGEAPI +WINAPI +UnDecorateSymbolName( + _In_ PCSTR name, + _Out_writes_(maxStringLength) PSTR outputString, + _In_ DWORD maxStringLength, + _In_ DWORD flags + ); + +DWORD +IMAGEAPI +WINAPI +UnDecorateSymbolNameW( + _In_ PCWSTR name, + _Out_writes_(maxStringLength) PWSTR outputString, + _In_ DWORD maxStringLength, + _In_ DWORD flags + ); + +// +// these values are used for synthesized file types +// that can be passed in as image headers instead of +// the standard ones from ntimage.h +// + +#define DBHHEADER_DEBUGDIRS 0x1 +#define DBHHEADER_CVMISC 0x2 +#define DBHHEADER_PDBGUID 0x3 + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +typedef struct _MODLOAD_DATA { + DWORD ssize; // size of this struct + DWORD ssig; // signature identifying the passed data + PVOID data; // pointer to passed data + DWORD size; // size of passed data + DWORD flags; // options +} MODLOAD_DATA, *PMODLOAD_DATA; + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +typedef struct _MODLOAD_CVMISC { + DWORD oCV; // ofset to the codeview record + size_t cCV; // size of the codeview record + DWORD oMisc; // offset to the misc record + size_t cMisc; // size of the misc record + DWORD dtImage; // datetime stamp of the image + DWORD cImage; // size of the image +} MODLOAD_CVMISC, *PMODLOAD_CVMISC; + +typedef struct _MODLOAD_PDBGUID_PDBAGE { + GUID PdbGuid; // Pdb Guid + DWORD PdbAge; // Pdb Age +} MODLOAD_PDBGUID_PDBAGE, *PMODLOAD_PDBGUID_PDBAGE; + +// +// StackWalking API +// + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +typedef enum { + AddrMode1616, + AddrMode1632, + AddrModeReal, + AddrModeFlat +} ADDRESS_MODE; + +typedef struct _tagADDRESS64 { + DWORD64 Offset; + WORD Segment; + ADDRESS_MODE Mode; +} ADDRESS64, *LPADDRESS64; + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define ADDRESS ADDRESS64 +#define LPADDRESS LPADDRESS64 +#else +typedef struct _tagADDRESS { + DWORD Offset; + WORD Segment; + ADDRESS_MODE Mode; +} ADDRESS, *LPADDRESS; + +__inline +void +Address32To64( + _In_ LPADDRESS a32, + _Out_ LPADDRESS64 a64 + ) +{ + a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset; + a64->Segment = a32->Segment; + a64->Mode = a32->Mode; +} + +__inline +void +Address64To32( + _In_ LPADDRESS64 a64, + _Out_ LPADDRESS a32 + ) +{ + a32->Offset = (ULONG)a64->Offset; + a32->Segment = a64->Segment; + a32->Mode = a64->Mode; +} +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +// +// This structure is included in the STACKFRAME structure, +// and is used to trace through usermode callbacks in a thread's +// kernel stack. The values must be copied by the kernel debugger +// from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets. +// + +// +// New KDHELP structure for 64 bit system support. +// This structure is preferred in new code. +// +typedef struct _KDHELP64 { + + // + // address of kernel thread object, as provided in the + // WAIT_STATE_CHANGE packet. + // + DWORD64 Thread; + + // + // offset in thread object to pointer to the current callback frame + // in kernel stack. + // + DWORD ThCallbackStack; + + // + // offset in thread object to pointer to the current callback backing + // store frame in kernel stack. + // + DWORD ThCallbackBStore; + + // + // offsets to values in frame: + // + // address of next callback frame + DWORD NextCallback; + + // address of saved frame pointer (if applicable) + DWORD FramePointer; + + + // + // Address of the kernel function that calls out to user mode + // + DWORD64 KiCallUserMode; + + // + // Address of the user mode dispatcher function + // + DWORD64 KeUserCallbackDispatcher; + + // + // Lowest kernel mode address + // + DWORD64 SystemRangeStart; + + // + // Address of the user mode exception dispatcher function. + // Added in API version 10. + // + DWORD64 KiUserExceptionDispatcher; + + // + // Stack bounds, added in API version 11. + // + DWORD64 StackBase; + DWORD64 StackLimit; + + // + // Target OS build number. Added in API version 12. + // + DWORD BuildVersion; + DWORD RetpolineStubFunctionTableSize; + DWORD64 RetpolineStubFunctionTable; + DWORD RetpolineStubOffset; + DWORD RetpolineStubSize; + DWORD64 Reserved0[2]; + +} KDHELP64, *PKDHELP64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define KDHELP KDHELP64 +#define PKDHELP PKDHELP64 +#else +typedef struct _KDHELP { + + // + // address of kernel thread object, as provided in the + // WAIT_STATE_CHANGE packet. + // + DWORD Thread; + + // + // offset in thread object to pointer to the current callback frame + // in kernel stack. + // + DWORD ThCallbackStack; + + // + // offsets to values in frame: + // + // address of next callback frame + DWORD NextCallback; + + // address of saved frame pointer (if applicable) + DWORD FramePointer; + + // + // Address of the kernel function that calls out to user mode + // + DWORD KiCallUserMode; + + // + // Address of the user mode dispatcher function + // + DWORD KeUserCallbackDispatcher; + + // + // Lowest kernel mode address + // + DWORD SystemRangeStart; + + // + // offset in thread object to pointer to the current callback backing + // store frame in kernel stack. + // + DWORD ThCallbackBStore; + + // + // Address of the user mode exception dispatcher function. + // Added in API version 10. + // + DWORD KiUserExceptionDispatcher; + + // + // Stack bounds, added in API version 11. + // + DWORD StackBase; + DWORD StackLimit; + + DWORD Reserved[5]; + +} KDHELP, *PKDHELP; + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +__inline +void +KdHelp32To64( + _In_ PKDHELP p32, + _Out_ PKDHELP64 p64 + ) +{ + p64->Thread = p32->Thread; + p64->ThCallbackStack = p32->ThCallbackStack; + p64->NextCallback = p32->NextCallback; + p64->FramePointer = p32->FramePointer; + p64->KiCallUserMode = p32->KiCallUserMode; + p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher; + p64->SystemRangeStart = p32->SystemRangeStart; + p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher; + p64->StackBase = p32->StackBase; + p64->StackLimit = p32->StackLimit; +} +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +typedef struct _tagSTACKFRAME64 { + ADDRESS64 AddrPC; // program counter + ADDRESS64 AddrReturn; // return address + ADDRESS64 AddrFrame; // frame pointer + ADDRESS64 AddrStack; // stack pointer + ADDRESS64 AddrBStore; // backing store pointer + PVOID FuncTableEntry; // pointer to pdata/fpo or NULL + DWORD64 Params[4]; // possible arguments to the function + BOOL Far; // WOW far call + BOOL Virtual; // is this a virtual frame? + DWORD64 Reserved[3]; + KDHELP64 KdHelp; +} STACKFRAME64, *LPSTACKFRAME64; + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#define INLINE_FRAME_CONTEXT_INIT 0 +#define INLINE_FRAME_CONTEXT_IGNORE 0xFFFFFFFF + +typedef struct _tagSTACKFRAME_EX { + // First, STACKFRAME64 structure + ADDRESS64 AddrPC; // program counter + ADDRESS64 AddrReturn; // return address + ADDRESS64 AddrFrame; // frame pointer + ADDRESS64 AddrStack; // stack pointer + ADDRESS64 AddrBStore; // backing store pointer + PVOID FuncTableEntry; // pointer to pdata/fpo or NULL + DWORD64 Params[4]; // possible arguments to the function + BOOL Far; // WOW far call + BOOL Virtual; // is this a virtual frame? + DWORD64 Reserved[3]; + KDHELP64 KdHelp; + + // Extended STACKFRAME fields + DWORD StackFrameSize; + DWORD InlineFrameContext; +} STACKFRAME_EX, *LPSTACKFRAME_EX; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define STACKFRAME STACKFRAME64 +#define LPSTACKFRAME LPSTACKFRAME64 +#else +typedef struct _tagSTACKFRAME { + ADDRESS AddrPC; // program counter + ADDRESS AddrReturn; // return address + ADDRESS AddrFrame; // frame pointer + ADDRESS AddrStack; // stack pointer + PVOID FuncTableEntry; // pointer to pdata/fpo or NULL + DWORD Params[4]; // possible arguments to the function + BOOL Far; // WOW far call + BOOL Virtual; // is this a virtual frame? + DWORD Reserved[3]; + KDHELP KdHelp; + ADDRESS AddrBStore; // backing store pointer +} STACKFRAME, *LPSTACKFRAME; +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +typedef +BOOL +(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)( + _In_ HANDLE hProcess, + _In_ DWORD64 qwBaseAddress, + _Out_writes_bytes_(nSize) PVOID lpBuffer, + _In_ DWORD nSize, + _Out_ LPDWORD lpNumberOfBytesRead + ); + +typedef +PVOID +(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)( + _In_ HANDLE ahProcess, + _In_ DWORD64 AddrBase + ); + +typedef +DWORD64 +(__stdcall *PGET_MODULE_BASE_ROUTINE64)( + _In_ HANDLE hProcess, + _In_ DWORD64 Address + ); + +typedef +DWORD64 +(__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)( + _In_ HANDLE hProcess, + _In_ HANDLE hThread, + _In_ LPADDRESS64 lpaddr + ); + +BOOL +IMAGEAPI +StackWalk64( + _In_ DWORD MachineType, + _In_ HANDLE hProcess, + _In_ HANDLE hThread, + _Inout_ LPSTACKFRAME64 StackFrame, + _Inout_ PVOID ContextRecord, + _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, + _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, + _In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, + _In_opt_ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#define SYM_STKWALK_DEFAULT 0x00000000 +#define SYM_STKWALK_FORCE_FRAMEPTR 0x00000001 +BOOL +IMAGEAPI +StackWalkEx( + _In_ DWORD MachineType, + _In_ HANDLE hProcess, + _In_ HANDLE hThread, + _Inout_ LPSTACKFRAME_EX StackFrame, + _Inout_ PVOID ContextRecord, + _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, + _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, + _In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, + _In_opt_ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress, + _In_ DWORD Flags + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) + +#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64 +#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64 +#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64 +#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64 + +#define StackWalk StackWalk64 + +#else + +typedef +BOOL +(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)( + _In_ HANDLE hProcess, + _In_ DWORD lpBaseAddress, + _Out_writes_bytes_(nSize) PVOID lpBuffer, + _In_ DWORD nSize, + _Out_ PDWORD lpNumberOfBytesRead + ); + +typedef +PVOID +(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)( + _In_ HANDLE hProcess, + _In_ DWORD AddrBase + ); + +typedef +DWORD +(__stdcall *PGET_MODULE_BASE_ROUTINE)( + _In_ HANDLE hProcess, + _In_ DWORD Address + ); + +typedef +DWORD +(__stdcall *PTRANSLATE_ADDRESS_ROUTINE)( + _In_ HANDLE hProcess, + _In_ HANDLE hThread, + _Out_ LPADDRESS lpaddr + ); + +BOOL +IMAGEAPI +StackWalk( + DWORD MachineType, + _In_ HANDLE hProcess, + _In_ HANDLE hThread, + _Inout_ LPSTACKFRAME StackFrame, + _Inout_ PVOID ContextRecord, + _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, + _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, + _In_opt_ PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, + _In_opt_ PTRANSLATE_ADDRESS_ROUTINE TranslateAddress + ); + +#endif + + +#define API_VERSION_NUMBER 12 + +typedef struct API_VERSION { + USHORT MajorVersion; + USHORT MinorVersion; + USHORT Revision; + USHORT Reserved; +} API_VERSION, *LPAPI_VERSION; + +LPAPI_VERSION +IMAGEAPI +ImagehlpApiVersion( + VOID + ); + +LPAPI_VERSION +IMAGEAPI +ImagehlpApiVersionEx( + _In_ LPAPI_VERSION AppVersion + ); + +DWORD +IMAGEAPI +GetTimestampForLoadedLibrary( + _In_ HMODULE Module + ); + +// +// typedefs for function pointers +// +typedef BOOL +(CALLBACK *PSYM_ENUMMODULES_CALLBACK64)( + _In_ PCSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)( + _In_ PCWSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PENUMLOADED_MODULES_CALLBACK64)( + _In_ PCSTR ModuleName, + _In_ DWORD64 ModuleBase, + _In_ ULONG ModuleSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)( + _In_ PCWSTR ModuleName, + _In_ DWORD64 ModuleBase, + _In_ ULONG ModuleSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)( + _In_ PCSTR SymbolName, + _In_ DWORD64 SymbolAddress, + _In_ ULONG SymbolSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)( + _In_ PCWSTR SymbolName, + _In_ DWORD64 SymbolAddress, + _In_ ULONG SymbolSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)( + _In_ HANDLE hProcess, + _In_ ULONG ActionCode, + _In_opt_ ULONG64 CallbackData, + _In_opt_ ULONG64 UserContext + ); + +typedef +PVOID +(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)( + _In_ HANDLE hProcess, + _In_ DWORD AddrBase, + _In_opt_ PVOID UserContext + ); + +typedef +PVOID +(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)( + _In_ HANDLE hProcess, + _In_ ULONG64 AddrBase, + _In_ ULONG64 UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) + +#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64 +#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64 +#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W +#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64 +#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64 +#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64 + +#else + +typedef BOOL +(CALLBACK *PSYM_ENUMMODULES_CALLBACK)( + _In_ PCSTR ModuleName, + _In_ ULONG BaseOfDll, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)( + _In_ PCSTR SymbolName, + _In_ ULONG SymbolAddress, + _In_ ULONG SymbolSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)( + _In_ PCWSTR SymbolName, + _In_ ULONG SymbolAddress, + _In_ ULONG SymbolSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PENUMLOADED_MODULES_CALLBACK)( + _In_ PCSTR ModuleName, + _In_ ULONG ModuleBase, + _In_ ULONG ModuleSize, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)( + _In_ HANDLE hProcess, + _In_ ULONG ActionCode, + _In_opt_ PVOID CallbackData, + _In_opt_ PVOID UserContext + ); + +#endif + + +// values found in SYMBOL_INFO.Tag +// +// This was taken from cvconst.h and should +// not override any values found there. +// +// #define _NO_CVCONST_H_ if you don't +// have access to that file... + +#ifdef _NO_CVCONST_H + +// DIA enums + +enum SymTagEnum +{ + SymTagNull, + SymTagExe, + SymTagCompiland, + SymTagCompilandDetails, + SymTagCompilandEnv, + SymTagFunction, + SymTagBlock, + SymTagData, + SymTagAnnotation, + SymTagLabel, + SymTagPublicSymbol, + SymTagUDT, + SymTagEnum, + SymTagFunctionType, + SymTagPointerType, + SymTagArrayType, + SymTagBaseType, + SymTagTypedef, + SymTagBaseClass, + SymTagFriend, + SymTagFunctionArgType, + SymTagFuncDebugStart, + SymTagFuncDebugEnd, + SymTagUsingNamespace, + SymTagVTableShape, + SymTagVTable, + SymTagCustom, + SymTagThunk, + SymTagCustomType, + SymTagManagedType, + SymTagDimension, + SymTagCallSite, + SymTagInlineSite, + SymTagBaseInterface, + SymTagVectorType, + SymTagMatrixType, + SymTagHLSLType, + SymTagCaller, + SymTagCallee, + SymTagExport, + SymTagHeapAllocationSite, + SymTagCoffGroup, + SymTagMax +}; + +#endif + +// +// flags found in SYMBOL_INFO.Flags +// + +#define SYMFLAG_VALUEPRESENT 0x00000001 +#define SYMFLAG_REGISTER 0x00000008 +#define SYMFLAG_REGREL 0x00000010 +#define SYMFLAG_FRAMEREL 0x00000020 +#define SYMFLAG_PARAMETER 0x00000040 +#define SYMFLAG_LOCAL 0x00000080 +#define SYMFLAG_CONSTANT 0x00000100 +#define SYMFLAG_EXPORT 0x00000200 +#define SYMFLAG_FORWARDER 0x00000400 +#define SYMFLAG_FUNCTION 0x00000800 +#define SYMFLAG_VIRTUAL 0x00001000 +#define SYMFLAG_THUNK 0x00002000 +#define SYMFLAG_TLSREL 0x00004000 +#define SYMFLAG_SLOT 0x00008000 +#define SYMFLAG_ILREL 0x00010000 +#define SYMFLAG_METADATA 0x00020000 +#define SYMFLAG_CLR_TOKEN 0x00040000 +#define SYMFLAG_NULL 0x00080000 +#define SYMFLAG_FUNC_NO_RETURN 0x00100000 +#define SYMFLAG_SYNTHETIC_ZEROBASE 0x00200000 +#define SYMFLAG_PUBLIC_CODE 0x00400000 +#define SYMFLAG_REGREL_ALIASINDIR 0x00800000 + +// this resets SymNext/Prev to the beginning +// of the module passed in the address field + +#define SYMFLAG_RESET 0x80000000 + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +// +// symbol type enumeration +// +typedef enum { + SymNone = 0, + SymCoff, + SymCv, + SymPdb, + SymExport, + SymDeferred, + SymSym, // .sym file + SymDia, + SymVirtual, + NumSymTypes +} SYM_TYPE; + +// +// symbol data structure +// + +typedef struct _IMAGEHLP_SYMBOL64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL64) + DWORD64 Address; // virtual address including dll base address + DWORD Size; // estimated size of symbol, can be zero + DWORD Flags; // info about the symbols, see the SYMF defines + DWORD MaxNameLength; // maximum size of symbol name in 'Name' + CHAR Name[1]; // symbol name (null terminated string) +} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; + +typedef struct _IMAGEHLP_SYMBOL64_PACKAGE { + IMAGEHLP_SYMBOL64 sym; + CHAR name[MAX_SYM_NAME + 1]; +} IMAGEHLP_SYMBOL64_PACKAGE, *PIMAGEHLP_SYMBOL64_PACKAGE; + +typedef struct _IMAGEHLP_SYMBOLW64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOLW64) + DWORD64 Address; // virtual address including dll base address + DWORD Size; // estimated size of symbol, can be zero + DWORD Flags; // info about the symbols, see the SYMF defines + DWORD MaxNameLength; // maximum size of symbol name in 'Name' + WCHAR Name[1]; // symbol name (null terminated string) +} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64; + +typedef struct _IMAGEHLP_SYMBOLW64_PACKAGE { + IMAGEHLP_SYMBOLW64 sym; + WCHAR name[MAX_SYM_NAME + 1]; +} IMAGEHLP_SYMBOLW64_PACKAGE, *PIMAGEHLP_SYMBOLW64_PACKAGE; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) + + #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64 + #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64 + #define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE + #define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE + #define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64 + #define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64 + #define IMAGEHLP_SYMBOLW_PACKAGE IMAGEHLP_SYMBOLW64_PACKAGE + #define PIMAGEHLP_SYMBOLW_PACKAGE PIMAGEHLP_SYMBOLW64_PACKAGE + +#else + + typedef struct _IMAGEHLP_SYMBOL { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL) + DWORD Address; // virtual address including dll base address + DWORD Size; // estimated size of symbol, can be zero + DWORD Flags; // info about the symbols, see the SYMF defines + DWORD MaxNameLength; // maximum size of symbol name in 'Name' + CHAR Name[1]; // symbol name (null terminated string) + } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; + + typedef struct _IMAGEHLP_SYMBOL_PACKAGE { + IMAGEHLP_SYMBOL sym; + CHAR name[MAX_SYM_NAME + 1]; + } IMAGEHLP_SYMBOL_PACKAGE, *PIMAGEHLP_SYMBOL_PACKAGE; + + typedef struct _IMAGEHLP_SYMBOLW { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOLW) + DWORD Address; // virtual address including dll base address + DWORD Size; // estimated size of symbol, can be zero + DWORD Flags; // info about the symbols, see the SYMF defines + DWORD MaxNameLength; // maximum size of symbol name in 'Name' + WCHAR Name[1]; // symbol name (null terminated string) + } IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW; + + typedef struct _IMAGEHLP_SYMBOLW_PACKAGE { + IMAGEHLP_SYMBOLW sym; + WCHAR name[MAX_SYM_NAME + 1]; + } IMAGEHLP_SYMBOLW_PACKAGE, *PIMAGEHLP_SYMBOLW_PACKAGE; + +#endif + +// +// module data structure +// + +typedef struct _IMAGEHLP_MODULE64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) + DWORD64 BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + CHAR ModuleName[32]; // module name + CHAR ImageName[256]; // image name + CHAR LoadedImageName[256]; // symbol file name + // new elements: 07-Jun-2002 + CHAR LoadedPdbName[256]; // pdb file name + DWORD CVSig; // Signature of the CV record in the debug directories + CHAR CVData[MAX_PATH * 3]; // Contents of the CV record + DWORD PdbSig; // Signature of PDB + GUID PdbSig70; // Signature of PDB (VC 7 and up) + DWORD PdbAge; // DBI age of pdb + BOOL PdbUnmatched; // loaded an unmatched pdb + BOOL DbgUnmatched; // loaded an unmatched dbg + BOOL LineNumbers; // we have line number information + BOOL GlobalSymbols; // we have internal symbol information + BOOL TypeInfo; // we have type information + // new elements: 17-Dec-2003 + BOOL SourceIndexed; // pdb supports source server + BOOL Publics; // contains public symbols + // new element: 15-Jul-2009 + DWORD MachineType; // IMAGE_FILE_MACHINE_XXX from ntimage.h and winnt.h + DWORD Reserved; // Padding - don't remove. +} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; + +typedef struct _IMAGEHLP_MODULEW64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) + DWORD64 BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + WCHAR ModuleName[32]; // module name + WCHAR ImageName[256]; // image name + // new elements: 07-Jun-2002 + WCHAR LoadedImageName[256]; // symbol file name + WCHAR LoadedPdbName[256]; // pdb file name + DWORD CVSig; // Signature of the CV record in the debug directories + WCHAR CVData[MAX_PATH * 3]; // Contents of the CV record + DWORD PdbSig; // Signature of PDB + GUID PdbSig70; // Signature of PDB (VC 7 and up) + DWORD PdbAge; // DBI age of pdb + BOOL PdbUnmatched; // loaded an unmatched pdb + BOOL DbgUnmatched; // loaded an unmatched dbg + BOOL LineNumbers; // we have line number information + BOOL GlobalSymbols; // we have internal symbol information + BOOL TypeInfo; // we have type information + // new elements: 17-Dec-2003 + BOOL SourceIndexed; // pdb supports source server + BOOL Publics; // contains public symbols + // new element: 15-Jul-2009 + DWORD MachineType; // IMAGE_FILE_MACHINE_XXX from ntimage.h and winnt.h + DWORD Reserved; // Padding - don't remove. +} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_MODULE IMAGEHLP_MODULE64 +#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64 +#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64 +#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64 +#else +typedef struct _IMAGEHLP_MODULE { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) + DWORD BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + CHAR ModuleName[32]; // module name + CHAR ImageName[256]; // image name + CHAR LoadedImageName[256]; // symbol file name +} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; + +typedef struct _IMAGEHLP_MODULEW { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) + DWORD BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + WCHAR ModuleName[32]; // module name + WCHAR ImageName[256]; // image name + WCHAR LoadedImageName[256]; // symbol file name +} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; +#endif + +// +// source file line data structure +// + +typedef struct _IMAGEHLP_LINE64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64) + PVOID Key; // internal + DWORD LineNumber; // line number in file + PCHAR FileName; // full filename + DWORD64 Address; // first instruction of line +} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; + +typedef struct _IMAGEHLP_LINEW64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64) + PVOID Key; // internal + DWORD LineNumber; // line number in file + PWSTR FileName; // full filename + DWORD64 Address; // first instruction of line +} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_LINE IMAGEHLP_LINE64 +#define PIMAGEHLP_LINE PIMAGEHLP_LINE64 +#else +typedef struct _IMAGEHLP_LINE { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE) + PVOID Key; // internal + DWORD LineNumber; // line number in file + PCHAR FileName; // full filename + DWORD Address; // first instruction of line +} IMAGEHLP_LINE, *PIMAGEHLP_LINE; + +typedef struct _IMAGEHLP_LINEW { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64) + PVOID Key; // internal + DWORD LineNumber; // line number in file + PCHAR FileName; // full filename + DWORD64 Address; // first instruction of line +} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW; +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +// +// source file structure +// + +typedef struct _SOURCEFILE { + DWORD64 ModBase; // base address of loaded module + PCHAR FileName; // full filename of source +} SOURCEFILE, *PSOURCEFILE; + +typedef struct _SOURCEFILEW { + DWORD64 ModBase; // base address of loaded module + PWSTR FileName; // full filename of source +} SOURCEFILEW, *PSOURCEFILEW; + +// +// data structures used for registered symbol callbacks +// + +#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 +#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 +#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 +#define CBA_SYMBOLS_UNLOADED 0x00000004 +#define CBA_DUPLICATE_SYMBOL 0x00000005 +#define CBA_READ_MEMORY 0x00000006 +#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 +#define CBA_SET_OPTIONS 0x00000008 +#define CBA_EVENT 0x00000010 +#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020 +#define CBA_DEBUG_INFO 0x10000000 +#define CBA_SRCSRV_INFO 0x20000000 +#define CBA_SRCSRV_EVENT 0x40000000 +#define CBA_UPDATE_STATUS_BAR 0x50000000 +#define CBA_ENGINE_PRESENT 0x60000000 +#define CBA_CHECK_ENGOPT_DISALLOW_NETWORK_PATHS 0x70000000 +#define CBA_CHECK_ARM_MACHINE_THUMB_TYPE_OVERRIDE 0x80000000 +#define CBA_XML_LOG 0x90000000 + + +typedef struct _IMAGEHLP_CBA_READ_MEMORY { + DWORD64 addr; // address to read from + PVOID buf; // buffer to read to + DWORD bytes; // amount of bytes to read + DWORD *bytesread; // pointer to store amount of bytes read +} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; + +enum { + sevInfo = 0, + sevProblem, + sevAttn, + sevFatal, + sevMax // unused +}; + +#define EVENT_SRCSPEW_START 100 +#define EVENT_SRCSPEW 100 +#define EVENT_SRCSPEW_END 199 + +typedef struct _IMAGEHLP_CBA_EVENT { + DWORD severity; // values from sevInfo to sevFatal + DWORD code; // numerical code IDs the error + PCHAR desc; // may contain a text description of the error + PVOID object; // value dependant upon the error code +} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT; + +typedef struct _IMAGEHLP_CBA_EVENTW { + DWORD severity; // values from sevInfo to sevFatal + DWORD code; // numerical code IDs the error + PCWSTR desc; // may contain a text description of the error + PVOID object; // value dependant upon the error code +} IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW; + +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64) + DWORD64 BaseOfImage; // base load address of module + DWORD CheckSum; // checksum from the pe header + DWORD TimeDateStamp; // date/time stamp from pe header + CHAR FileName[MAX_PATH]; // symbols file or image name + BOOLEAN Reparse; // load failure reparse + HANDLE hFile; // file handle, if passed + DWORD Flags; // +} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; + +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOADW64) + DWORD64 BaseOfImage; // base load address of module + DWORD CheckSum; // checksum from the pe header + DWORD TimeDateStamp; // date/time stamp from pe header + WCHAR FileName[MAX_PATH + 1]; // symbols file or image name + BOOLEAN Reparse; // load failure reparse + HANDLE hFile; // file handle, if passed + DWORD Flags; // +} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64; + +#define DSLFLAG_MISMATCHED_PDB 0x1 +#define DSLFLAG_MISMATCHED_DBG 0x2 +#define FLAG_ENGINE_PRESENT 0x4 +#define FLAG_ENGOPT_DISALLOW_NETWORK_PATHS 0x8 +#define FLAG_OVERRIDE_ARM_MACHINE_TYPE 0x10 + + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64 +#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 +#else +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD) + DWORD BaseOfImage; // base load address of module + DWORD CheckSum; // checksum from the pe header + DWORD TimeDateStamp; // date/time stamp from pe header + CHAR FileName[MAX_PATH]; // symbols file or image name + BOOLEAN Reparse; // load failure reparse + HANDLE hFile; // file handle, if passed +} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; +#endif + +typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64) + DWORD NumberOfDups; // number of duplicates in the Symbol array + PIMAGEHLP_SYMBOL64 Symbol; // array of duplicate symbols + DWORD SelectedSymbol; // symbol selected (-1 to start) +} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64 +#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64 +#else +typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL) + DWORD NumberOfDups; // number of duplicates in the Symbol array + PIMAGEHLP_SYMBOL Symbol; // array of duplicate symbols + DWORD SelectedSymbol; // symbol selected (-1 to start) +} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; +#endif + +// If dbghelp ever needs to display graphical UI, it will use this as the parent window. + +BOOL +IMAGEAPI +SymSetParentWindow( + _In_ HWND hwnd + ); + +PCHAR +IMAGEAPI +SymSetHomeDirectory( + _In_opt_ HANDLE hProcess, + _In_opt_ PCSTR dir + ); + +PWSTR +IMAGEAPI +SymSetHomeDirectoryW( + _In_opt_ HANDLE hProcess, + _In_opt_ PCWSTR dir + ); + +PCHAR +IMAGEAPI +SymGetHomeDirectory( + _In_ DWORD type, + _Out_writes_(size) PSTR dir, + _In_ size_t size + ); + +PWSTR +IMAGEAPI +SymGetHomeDirectoryW( + _In_ DWORD type, + _Out_writes_(size) PWSTR dir, + _In_ size_t size + ); + +typedef enum { + hdBase = 0, // root directory for dbghelp + hdSym, // where symbols are stored + hdSrc, // where source is stored + hdMax // end marker +} IMAGEHLP_HD_TYPE; + +typedef struct _OMAP { + ULONG rva; + ULONG rvaTo; +} OMAP, *POMAP; + +BOOL +IMAGEAPI +SymGetOmaps( + _In_ HANDLE hProcess, + _In_ DWORD64 BaseOfDll, + _Out_ POMAP *OmapTo, + _Out_ PDWORD64 cOmapTo, + _Out_ POMAP *OmapFrom, + _Out_ PDWORD64 cOmapFrom + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Application Family or OneCore Family or Games Family +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) + +// +// options that are set/returned by SymSetOptions() & SymGetOptions() +// these are used as a mask +// + + #define SYMOPT_CASE_INSENSITIVE 0x00000001 + #define SYMOPT_UNDNAME 0x00000002 + #define SYMOPT_DEFERRED_LOADS 0x00000004 + #define SYMOPT_NO_CPP 0x00000008 + #define SYMOPT_LOAD_LINES 0x00000010 + #define SYMOPT_OMAP_FIND_NEAREST 0x00000020 + #define SYMOPT_LOAD_ANYTHING 0x00000040 + #define SYMOPT_IGNORE_CVREC 0x00000080 + #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 + #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 + #define SYMOPT_EXACT_SYMBOLS 0x00000400 + #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 + #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 + #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 + #define SYMOPT_PUBLICS_ONLY 0x00004000 + #define SYMOPT_NO_PUBLICS 0x00008000 + #define SYMOPT_AUTO_PUBLICS 0x00010000 + #define SYMOPT_NO_IMAGE_SEARCH 0x00020000 + #define SYMOPT_SECURE 0x00040000 + #define SYMOPT_NO_PROMPTS 0x00080000 + #define SYMOPT_OVERWRITE 0x00100000 + #define SYMOPT_IGNORE_IMAGEDIR 0x00200000 + #define SYMOPT_FLAT_DIRECTORY 0x00400000 + #define SYMOPT_FAVOR_COMPRESSED 0x00800000 + #define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000 + #define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000 + #define SYMOPT_READONLY_CACHE 0x04000000 + #define SYMOPT_SYMPATH_LAST 0x08000000 + #define SYMOPT_DISABLE_FAST_SYMBOLS 0x10000000 + #define SYMOPT_DISABLE_SYMSRV_TIMEOUT 0x20000000 + #define SYMOPT_DISABLE_SRVSTAR_ON_STARTUP 0x40000000 + #define SYMOPT_DEBUG 0x80000000 + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +typedef enum { + SYMOPT_EX_DISABLEACCESSTIMEUPDATE, // Disable File Last Access Time on Symbols + SYMOPT_EX_LASTVALIDDEBUGDIRECTORY, // For entries with multiple debug directories: prefer the last to the first + SYMOPT_EX_MAX // Unused +} IMAGEHLP_EXTENDED_OPTIONS; + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +DWORD +IMAGEAPI +SymSetOptions( + _In_ DWORD SymOptions + ); + +DWORD +IMAGEAPI +SymGetOptions( + VOID + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +BOOL +IMAGEAPI +SymCleanup( + _In_ HANDLE hProcess + ); + +// Returns the value of the extended option +BOOL +IMAGEAPI +SymGetExtendedOption(_In_ IMAGEHLP_EXTENDED_OPTIONS option); + +// Returns the previous value of the option +BOOL +IMAGEAPI +SymSetExtendedOption(_In_ IMAGEHLP_EXTENDED_OPTIONS option, _In_ BOOL value); + +BOOL +IMAGEAPI +SymMatchString( + _In_ PCSTR string, + _In_ PCSTR expression, + _In_ BOOL fCase + ); + +BOOL +IMAGEAPI +SymMatchStringA( + _In_ PCSTR string, + _In_ PCSTR expression, + _In_ BOOL fCase + ); + +BOOL +IMAGEAPI +SymMatchStringW( + _In_ PCWSTR string, + _In_ PCWSTR expression, + _In_ BOOL fCase + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)( + _In_ PSOURCEFILE pSourceFile, + _In_opt_ PVOID UserContext + ); + +// for backwards compatibility - don't use this +#define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK + +BOOL +IMAGEAPI +SymEnumSourceFiles( + _In_ HANDLE hProcess, + _In_ ULONG64 ModBase, + _In_opt_ PCSTR Mask, + _In_ PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)( + _In_ PSOURCEFILEW pSourceFile, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSourceFilesW( + _In_ HANDLE hProcess, + _In_ ULONG64 ModBase, + _In_opt_ PCWSTR Mask, + _In_ PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumerateModules64( + _In_ HANDLE hProcess, + _In_ PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumerateModulesW64( + _In_ HANDLE hProcess, + _In_ PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback, + _In_opt_ PVOID UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymEnumerateModules SymEnumerateModules64 +#else +BOOL +IMAGEAPI +SymEnumerateModules( + _In_ HANDLE hProcess, + _In_ PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, + _In_opt_ PVOID UserContext + ); +#endif + +BOOL +IMAGEAPI +EnumerateLoadedModulesEx( + _In_ HANDLE hProcess, + _In_ PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +EnumerateLoadedModulesExW( + _In_ HANDLE hProcess, + _In_ PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +EnumerateLoadedModules64( + _In_ HANDLE hProcess, + _In_ PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +EnumerateLoadedModulesW64( + _In_ HANDLE hProcess, + _In_ PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback, + _In_opt_ PVOID UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define EnumerateLoadedModules EnumerateLoadedModules64 +#else +BOOL +IMAGEAPI +EnumerateLoadedModules( + _In_ HANDLE hProcess, + _In_ PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback, + _In_opt_ PVOID UserContext + ); +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +PVOID +IMAGEAPI +SymFunctionTableAccess64( + _In_ HANDLE hProcess, + _In_ DWORD64 AddrBase + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +PVOID +IMAGEAPI +SymFunctionTableAccess64AccessRoutines( + _In_ HANDLE hProcess, + _In_ DWORD64 AddrBase, + _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, + _In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymFunctionTableAccess SymFunctionTableAccess64 +#else +PVOID +IMAGEAPI +SymFunctionTableAccess( + _In_ HANDLE hProcess, + _In_ DWORD AddrBase + ); +#endif + +BOOL +IMAGEAPI +SymGetUnwindInfo( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _Out_writes_bytes_opt_(*Size) PVOID Buffer, + _Inout_ PULONG Size + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +BOOL +IMAGEAPI +SymGetModuleInfo64( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_ PIMAGEHLP_MODULE64 ModuleInfo + ); + +BOOL +IMAGEAPI +SymGetModuleInfoW64( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_ PIMAGEHLP_MODULEW64 ModuleInfo + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetModuleInfo SymGetModuleInfo64 +#define SymGetModuleInfoW SymGetModuleInfoW64 +#else +BOOL +IMAGEAPI +SymGetModuleInfo( + _In_ HANDLE hProcess, + _In_ DWORD dwAddr, + _Out_ PIMAGEHLP_MODULE ModuleInfo + ); + +BOOL +IMAGEAPI +SymGetModuleInfoW( + _In_ HANDLE hProcess, + _In_ DWORD dwAddr, + _Out_ PIMAGEHLP_MODULEW ModuleInfo + ); +#endif + +DWORD64 +IMAGEAPI +SymGetModuleBase64( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetModuleBase SymGetModuleBase64 +#else +DWORD +IMAGEAPI +SymGetModuleBase( + _In_ HANDLE hProcess, + _In_ DWORD dwAddr + ); +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +typedef struct _SRCCODEINFO { + DWORD SizeOfStruct; // set to sizeof(SRCCODEINFO) + PVOID Key; // not used + DWORD64 ModBase; // base address of module this applies to + CHAR Obj[MAX_PATH + 1]; // the object file within the module + CHAR FileName[MAX_PATH + 1]; // full filename + DWORD LineNumber; // line number in file + DWORD64 Address; // first instruction of line +} SRCCODEINFO, *PSRCCODEINFO; + +typedef struct _SRCCODEINFOW { + DWORD SizeOfStruct; // set to sizeof(SRCCODEINFO) + PVOID Key; // not used + DWORD64 ModBase; // base address of module this applies to + WCHAR Obj[MAX_PATH + 1]; // the object file within the module + WCHAR FileName[MAX_PATH + 1]; // full filename + DWORD LineNumber; // line number in file + DWORD64 Address; // first instruction of line +} SRCCODEINFOW, *PSRCCODEINFOW; + +typedef BOOL +(CALLBACK *PSYM_ENUMLINES_CALLBACK)( + _In_ PSRCCODEINFO LineInfo, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumLines( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCSTR Obj, + _In_opt_ PCSTR File, + _In_ PSYM_ENUMLINES_CALLBACK EnumLinesCallback, + _In_opt_ PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMLINES_CALLBACKW)( + _In_ PSRCCODEINFOW LineInfo, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumLinesW( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCWSTR Obj, + _In_opt_ PCWSTR File, + _In_ PSYM_ENUMLINES_CALLBACKW EnumLinesCallback, + _In_opt_ PVOID UserContext + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +BOOL +IMAGEAPI +SymGetLineFromAddr64( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINE64 Line64 + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +BOOL +IMAGEAPI +SymGetLineFromAddrW64( + _In_ HANDLE hProcess, + _In_ DWORD64 dwAddr, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINEW64 Line + ); + +BOOL +IMAGEAPI +SymGetLineFromInlineContext( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _In_ ULONG InlineContext, + _In_opt_ DWORD64 qwModuleBaseAddress, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINE64 Line64 + ); + +BOOL +IMAGEAPI +SymGetLineFromInlineContextW( + _In_ HANDLE hProcess, + _In_ DWORD64 dwAddr, + _In_ ULONG InlineContext, + _In_opt_ DWORD64 qwModuleBaseAddress, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINEW64 Line + ); + +BOOL +IMAGEAPI +SymEnumSourceLines( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCSTR Obj, + _In_opt_ PCSTR File, + _In_opt_ DWORD Line, + _In_ DWORD Flags, + _In_ PSYM_ENUMLINES_CALLBACK EnumLinesCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSourceLinesW( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCWSTR Obj, + _In_opt_ PCWSTR File, + _In_opt_ DWORD Line, + _In_ DWORD Flags, + _In_ PSYM_ENUMLINES_CALLBACKW EnumLinesCallback, + _In_opt_ PVOID UserContext + ); + +// Check whether input Address includes "inline stack". +DWORD +IMAGEAPI +SymAddrIncludeInlineTrace( + _In_ HANDLE hProcess, + _In_ DWORD64 Address + ); + +#define SYM_INLINE_COMP_ERROR 0 +#define SYM_INLINE_COMP_IDENTICAL 1 +#define SYM_INLINE_COMP_STEPIN 2 +#define SYM_INLINE_COMP_STEPOUT 3 +#define SYM_INLINE_COMP_STEPOVER 4 +#define SYM_INLINE_COMP_DIFFERENT 5 + +// Compare the "inline stack" from the 2 input addresses and determine whether the difference is possibly from +// what execution control operation. The return value would be onr of the literals defined above. +DWORD +IMAGEAPI +SymCompareInlineTrace( + _In_ HANDLE hProcess, + _In_ DWORD64 Address1, + _In_ DWORD InlineContext1, + _In_ DWORD64 RetAddress1, + _In_ DWORD64 Address2, + _In_ DWORD64 RetAddress2 + ); + +BOOL +IMAGEAPI +SymQueryInlineTrace( + _In_ HANDLE hProcess, + _In_ DWORD64 StartAddress, + _In_ DWORD StartContext, + _In_ DWORD64 StartRetAddress, + _In_ DWORD64 CurAddress, + _Out_ LPDWORD CurContext, + _Out_ LPDWORD CurFrameIndex + ); + +// flags for SymEnumSourceLines + +#define ESLFLAG_FULLPATH 0x00000001 +#define ESLFLAG_NEAREST 0x00000002 +#define ESLFLAG_PREV 0x00000004 +#define ESLFLAG_NEXT 0x00000008 +#define ESLFLAG_INLINE_SITE 0x00000010 + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLineFromAddr SymGetLineFromAddr64 +#define SymGetLineFromAddrW SymGetLineFromAddrW64 +#else +BOOL +IMAGEAPI +SymGetLineFromAddr( + _In_ HANDLE hProcess, + _In_ DWORD dwAddr, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINE Line + ); + +BOOL +IMAGEAPI +SymGetLineFromAddrW( + _In_ HANDLE hProcess, + _In_ DWORD dwAddr, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINEW Line + ); +#endif + +BOOL +IMAGEAPI +SymGetLineFromName64( + _In_ HANDLE hProcess, + _In_opt_ PCSTR ModuleName, + _In_opt_ PCSTR FileName, + _In_ DWORD dwLineNumber, + _Out_ PLONG plDisplacement, + _Inout_ PIMAGEHLP_LINE64 Line + ); + +BOOL +IMAGEAPI +SymGetLineFromNameW64( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR ModuleName, + _In_opt_ PCWSTR FileName, + _In_ DWORD dwLineNumber, + _Out_ PLONG plDisplacement, + _Inout_ PIMAGEHLP_LINEW64 Line + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLineFromName SymGetLineFromName64 +#else +BOOL +IMAGEAPI +SymGetLineFromName( + _In_ HANDLE hProcess, + _In_opt_ PCSTR ModuleName, + _In_opt_ PCSTR FileName, + _In_ DWORD dwLineNumber, + _Out_ PLONG plDisplacement, + _Inout_ PIMAGEHLP_LINE Line + ); +#endif + +BOOL +IMAGEAPI +SymGetLineNext64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINE64 Line + ); + +BOOL +IMAGEAPI +SymGetLineNextW64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINEW64 Line + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLineNext SymGetLineNext64 +#else +BOOL +IMAGEAPI +SymGetLineNext( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINE Line + ); + +BOOL +IMAGEAPI +SymGetLineNextW( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINEW Line + ); +#endif + +BOOL +IMAGEAPI +SymGetLinePrev64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINE64 Line + ); + +BOOL +IMAGEAPI +SymGetLinePrevW64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINEW64 Line + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLinePrev SymGetLinePrev64 +#else +BOOL +IMAGEAPI +SymGetLinePrev( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINE Line + ); + +BOOL +IMAGEAPI +SymGetLinePrevW( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_LINEW Line + ); +#endif + +ULONG +IMAGEAPI +SymGetFileLineOffsets64( + _In_ HANDLE hProcess, + _In_opt_ PCSTR ModuleName, + _In_ PCSTR FileName, + _Out_writes_(BufferLines) PDWORD64 Buffer, + _In_ ULONG BufferLines + ); + +BOOL +IMAGEAPI +SymMatchFileName( + _In_ PCSTR FileName, + _In_ PCSTR Match, + _Outptr_opt_ PSTR *FileNameStop, + _Outptr_opt_ PSTR *MatchStop + ); + +BOOL +IMAGEAPI +SymMatchFileNameW( + _In_ PCWSTR FileName, + _In_ PCWSTR Match, + _Outptr_opt_ PWSTR *FileNameStop, + _Outptr_opt_ PWSTR *MatchStop + ); + +BOOL +IMAGEAPI +SymGetSourceFile( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCSTR Params, + _In_ PCSTR FileSpec, + _Out_writes_(Size) PSTR FilePath, + _In_ DWORD Size + ); + +BOOL +IMAGEAPI +SymGetSourceFileW( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCWSTR Params, + _In_ PCWSTR FileSpec, + _Out_writes_(Size) PWSTR FilePath, + _In_ DWORD Size + ); + +BOOL +IMAGEAPI +SymGetSourceFileToken( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_ PCSTR FileSpec, + _Outptr_ PVOID *Token, + _Out_ DWORD *Size + ); + +BOOL +IMAGEAPI +SymGetSourceFileChecksumW( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_ PCWSTR FileSpec, + _Out_ DWORD *pCheckSumType, + _Out_writes_(checksumSize) BYTE *pChecksum, + _In_ DWORD checksumSize, + _Out_ DWORD *pActualBytesWritten + ); + +BOOL +IMAGEAPI +SymGetSourceFileChecksum( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_ PCSTR FileSpec, + _Out_ DWORD *pCheckSumType, + _Out_writes_(checksumSize) BYTE *pChecksum, + _In_ DWORD checksumSize, + _Out_ DWORD *pActualBytesWritten + ); + +BOOL +IMAGEAPI +SymGetSourceFileTokenW( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_ PCWSTR FileSpec, + _Outptr_ PVOID *Token, + _Out_ DWORD *Size + ); + +BOOL +IMAGEAPI +SymGetSourceFileFromToken( + _In_ HANDLE hProcess, + _In_ PVOID Token, + _In_opt_ PCSTR Params, + _Out_writes_(Size) PSTR FilePath, + _In_ DWORD Size + ); + +BOOL +IMAGEAPI +SymGetSourceFileFromTokenW( + _In_ HANDLE hProcess, + _In_ PVOID Token, + _In_opt_ PCWSTR Params, + _Out_writes_(Size) PWSTR FilePath, + _In_ DWORD Size + ); + +BOOL +IMAGEAPI +SymGetSourceVarFromToken( + _In_ HANDLE hProcess, + _In_ PVOID Token, + _In_opt_ PCSTR Params, + _In_ PCSTR VarName, + _Out_writes_(Size) PSTR Value, + _In_ DWORD Size + ); + +BOOL +IMAGEAPI +SymGetSourceVarFromTokenW( + _In_ HANDLE hProcess, + _In_ PVOID Token, + _In_opt_ PCWSTR Params, + _In_ PCWSTR VarName, + _Out_writes_(Size) PWSTR Value, + _In_ DWORD Size + ); + +typedef BOOL (CALLBACK *PENUMSOURCEFILETOKENSCALLBACK)(_In_ PVOID token, _In_ size_t size); + +BOOL +IMAGEAPI +SymEnumSourceFileTokens( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_ PENUMSOURCEFILETOKENSCALLBACK Callback + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +BOOL +IMAGEAPI +SymInitialize( + _In_ HANDLE hProcess, + _In_opt_ PCSTR UserSearchPath, + _In_ BOOL fInvadeProcess + ); + +BOOL +IMAGEAPI +SymInitializeW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR UserSearchPath, + _In_ BOOL fInvadeProcess + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +BOOL +IMAGEAPI +SymGetSearchPath( + _In_ HANDLE hProcess, + _Out_writes_(SearchPathLength) PSTR SearchPath, + _In_ DWORD SearchPathLength + ); + +BOOL +IMAGEAPI +SymGetSearchPathW( + _In_ HANDLE hProcess, + _Out_writes_(SearchPathLength) PWSTR SearchPath, + _In_ DWORD SearchPathLength + ); + +BOOL +IMAGEAPI +SymSetSearchPath( + _In_ HANDLE hProcess, + _In_opt_ PCSTR SearchPath + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +BOOL +IMAGEAPI +SymSetSearchPathW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR SearchPath + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#define SLMFLAG_VIRTUAL 0x1 +#define SLMFLAG_ALT_INDEX 0x2 +#define SLMFLAG_NO_SYMBOLS 0x4 + +DWORD64 +IMAGEAPI +SymLoadModuleEx( + _In_ HANDLE hProcess, + _In_opt_ HANDLE hFile, + _In_opt_ PCSTR ImageName, + _In_opt_ PCSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_ DWORD DllSize, + _In_opt_ PMODLOAD_DATA Data, + _In_opt_ DWORD Flags + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +DWORD64 +IMAGEAPI +SymLoadModuleExW( + _In_ HANDLE hProcess, + _In_opt_ HANDLE hFile, + _In_opt_ PCWSTR ImageName, + _In_opt_ PCWSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_ DWORD DllSize, + _In_opt_ PMODLOAD_DATA Data, + _In_opt_ DWORD Flags + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +BOOL +IMAGEAPI +SymUnloadModule64( + _In_ HANDLE hProcess, + _In_ DWORD64 BaseOfDll + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymUnloadModule SymUnloadModule64 +#else +BOOL +IMAGEAPI +SymUnloadModule( + _In_ HANDLE hProcess, + _In_ DWORD BaseOfDll + ); +#endif + +BOOL +IMAGEAPI +SymUnDName64( + _In_ PIMAGEHLP_SYMBOL64 sym, // Symbol to undecorate + _Out_writes_(UnDecNameLength) PSTR UnDecName, // Buffer to store undecorated name in + _In_ DWORD UnDecNameLength // Size of the buffer + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymUnDName SymUnDName64 +#else +BOOL +IMAGEAPI +SymUnDName( + _In_ PIMAGEHLP_SYMBOL sym, // Symbol to undecorate + _Out_writes_(UnDecNameLength) PSTR UnDecName, // Buffer to store undecorated name in + _In_ DWORD UnDecNameLength // Size of the buffer + ); +#endif + +BOOL +IMAGEAPI +SymRegisterCallback64( + _In_ HANDLE hProcess, + _In_ PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, + _In_ ULONG64 UserContext + ); + +BOOL +IMAGEAPI +SymRegisterCallbackW64( + _In_ HANDLE hProcess, + _In_ PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, + _In_ ULONG64 UserContext + ); + +BOOL +IMAGEAPI +SymRegisterFunctionEntryCallback64( + _In_ HANDLE hProcess, + _In_ PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction, + _In_ ULONG64 UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymRegisterCallback SymRegisterCallback64 +#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64 +#else +BOOL +IMAGEAPI +SymRegisterCallback( + _In_ HANDLE hProcess, + _In_ PSYMBOL_REGISTERED_CALLBACK CallbackFunction, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymRegisterFunctionEntryCallback( + _In_ HANDLE hProcess, + _In_ PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction, + _In_opt_ PVOID UserContext + ); +#endif + + +typedef struct _IMAGEHLP_SYMBOL_SRC { + DWORD sizeofstruct; + DWORD type; + char file[MAX_PATH]; +} IMAGEHLP_SYMBOL_SRC, *PIMAGEHLP_SYMBOL_SRC; + +typedef struct _MODULE_TYPE_INFO { // AKA TYPTYP + USHORT dataLength; + USHORT leaf; + BYTE data[1]; +} MODULE_TYPE_INFO, *PMODULE_TYPE_INFO; + +typedef struct _SYMBOL_INFO { + ULONG SizeOfStruct; + ULONG TypeIndex; // Type Index of symbol + ULONG64 Reserved[2]; + ULONG Index; + ULONG Size; + ULONG64 ModBase; // Base Address of module comtaining this symbol + ULONG Flags; + ULONG64 Value; // Value of symbol, ValuePresent should be 1 + ULONG64 Address; // Address of symbol including base address of module + ULONG Register; // register holding value or pointer to value + ULONG Scope; // scope of the symbol + ULONG Tag; // pdb classification + ULONG NameLen; // Actual length of name + ULONG MaxNameLen; + CHAR Name[1]; // Name of symbol +} SYMBOL_INFO, *PSYMBOL_INFO; + +typedef struct _SYMBOL_INFO_PACKAGE { + SYMBOL_INFO si; + CHAR name[MAX_SYM_NAME + 1]; +} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE; + +typedef struct _SYMBOL_INFOW { + ULONG SizeOfStruct; + ULONG TypeIndex; // Type Index of symbol + ULONG64 Reserved[2]; + ULONG Index; + ULONG Size; + ULONG64 ModBase; // Base Address of module comtaining this symbol + ULONG Flags; + ULONG64 Value; // Value of symbol, ValuePresent should be 1 + ULONG64 Address; // Address of symbol including base address of module + ULONG Register; // register holding value or pointer to value + ULONG Scope; // scope of the symbol + ULONG Tag; // pdb classification + ULONG NameLen; // Actual length of name + ULONG MaxNameLen; + WCHAR Name[1]; // Name of symbol +} SYMBOL_INFOW, *PSYMBOL_INFOW; + +typedef struct _SYMBOL_INFO_PACKAGEW { + SYMBOL_INFOW si; + WCHAR name[MAX_SYM_NAME + 1]; +} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW; + +typedef struct _IMAGEHLP_STACK_FRAME +{ + ULONG64 InstructionOffset; + ULONG64 ReturnOffset; + ULONG64 FrameOffset; + ULONG64 StackOffset; + ULONG64 BackingStoreOffset; + ULONG64 FuncTableEntry; + ULONG64 Params[4]; + ULONG64 Reserved[5]; + BOOL Virtual; + ULONG Reserved2; +} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; + +typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; + + +BOOL +IMAGEAPI +SymSetContext( + _In_ HANDLE hProcess, + _In_ PIMAGEHLP_STACK_FRAME StackFrame, + _In_opt_ PIMAGEHLP_CONTEXT Context + ); + +BOOL +IMAGEAPI +SymSetScopeFromAddr( + _In_ HANDLE hProcess, + _In_ ULONG64 Address + ); + +BOOL +IMAGEAPI +SymSetScopeFromInlineContext( + _In_ HANDLE hProcess, + _In_ ULONG64 Address, + _In_ ULONG InlineContext + ); + +BOOL +IMAGEAPI +SymSetScopeFromIndex( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ DWORD Index + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMPROCESSES_CALLBACK)( + _In_ HANDLE hProcess, + _In_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumProcesses( + _In_ PSYM_ENUMPROCESSES_CALLBACK EnumProcessesCallback, + _In_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymFromAddr( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _Out_opt_ PDWORD64 Displacement, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymFromAddrW( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _Out_opt_ PDWORD64 Displacement, + _Inout_ PSYMBOL_INFOW Symbol + ); + +BOOL +IMAGEAPI +SymFromInlineContext( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _In_ ULONG InlineContext, + _Out_opt_ PDWORD64 Displacement, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymFromInlineContextW( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _In_ ULONG InlineContext, + _Out_opt_ PDWORD64 Displacement, + _Inout_ PSYMBOL_INFOW Symbol + ); + +BOOL +IMAGEAPI +SymFromToken( + _In_ HANDLE hProcess, + _In_ DWORD64 Base, + _In_ DWORD Token, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymFromTokenW( + _In_ HANDLE hProcess, + _In_ DWORD64 Base, + _In_ DWORD Token, + _Inout_ PSYMBOL_INFOW Symbol + ); + +BOOL +IMAGEAPI +SymNext( + _In_ HANDLE hProcess, + _Inout_ PSYMBOL_INFO si + ); + +BOOL +IMAGEAPI +SymNextW( + _In_ HANDLE hProcess, + _Inout_ PSYMBOL_INFOW siw + ); + +BOOL +IMAGEAPI +SymPrev( + _In_ HANDLE hProcess, + _Inout_ PSYMBOL_INFO si + ); + +BOOL +IMAGEAPI +SymPrevW( + _In_ HANDLE hProcess, + _Inout_ PSYMBOL_INFOW siw + ); + +// While SymFromName will provide a symbol from a name, +// SymEnumSymbols can provide the same matching information +// for ALL symbols with a matching name, even regular +// expressions. That way you can search across modules +// and differentiate between identically named symbols. + +BOOL +IMAGEAPI +SymFromName( + _In_ HANDLE hProcess, + _In_ PCSTR Name, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymFromNameW( + _In_ HANDLE hProcess, + _In_ PCWSTR Name, + _Inout_ PSYMBOL_INFOW Symbol + ); + +#define SYMENUM_OPTIONS_DEFAULT 0x00000001 +#define SYMENUM_OPTIONS_INLINE 0x00000002 + +typedef BOOL +(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)( + _In_ PSYMBOL_INFO pSymInfo, + _In_ ULONG SymbolSize, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbols( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCSTR Mask, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbolsEx( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCSTR Mask, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext, + _In_ DWORD Options + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)( + _In_ PSYMBOL_INFOW pSymInfo, + _In_ ULONG SymbolSize, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbolsW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCWSTR Mask, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbolsExW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCWSTR Mask, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext, + _In_ DWORD Options + ); + +BOOL +IMAGEAPI +SymEnumSymbolsForAddr( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbolsForAddrW( + _In_ HANDLE hProcess, + _In_ DWORD64 Address, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +#define SYMSEARCH_MASKOBJS 0x01 // used internally to implement other APIs +#define SYMSEARCH_RECURSE 0X02 // recurse scopes +#define SYMSEARCH_GLOBALSONLY 0X04 // search only for global symbols +#define SYMSEARCH_ALLITEMS 0X08 // search for everything in the pdb, not just normal scoped symbols + +BOOL +IMAGEAPI +SymSearch( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ DWORD Index, + _In_opt_ DWORD SymTag, + _In_opt_ PCSTR Mask, + _In_opt_ DWORD64 Address, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext, + _In_ DWORD Options + ); + +BOOL +IMAGEAPI +SymSearchW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ DWORD Index, + _In_opt_ DWORD SymTag, + _In_opt_ PCWSTR Mask, + _In_opt_ DWORD64 Address, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext, + _In_ DWORD Options + ); + +BOOL +IMAGEAPI +SymGetScope( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ DWORD Index, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymGetScopeW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ DWORD Index, + _Inout_ PSYMBOL_INFOW Symbol + ); + +BOOL +IMAGEAPI +SymFromIndex( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ DWORD Index, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymFromIndexW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ DWORD Index, + _Inout_ PSYMBOL_INFOW Symbol + ); + +typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { + TI_GET_SYMTAG, + TI_GET_SYMNAME, + TI_GET_LENGTH, + TI_GET_TYPE, + TI_GET_TYPEID, + TI_GET_BASETYPE, + TI_GET_ARRAYINDEXTYPEID, + TI_FINDCHILDREN, + TI_GET_DATAKIND, + TI_GET_ADDRESSOFFSET, + TI_GET_OFFSET, + TI_GET_VALUE, + TI_GET_COUNT, + TI_GET_CHILDRENCOUNT, + TI_GET_BITPOSITION, + TI_GET_VIRTUALBASECLASS, + TI_GET_VIRTUALTABLESHAPEID, + TI_GET_VIRTUALBASEPOINTEROFFSET, + TI_GET_CLASSPARENTID, + TI_GET_NESTED, + TI_GET_SYMINDEX, + TI_GET_LEXICALPARENT, + TI_GET_ADDRESS, + TI_GET_THISADJUST, + TI_GET_UDTKIND, + TI_IS_EQUIV_TO, + TI_GET_CALLING_CONVENTION, + TI_IS_CLOSE_EQUIV_TO, + TI_GTIEX_REQS_VALID, + TI_GET_VIRTUALBASEOFFSET, + TI_GET_VIRTUALBASEDISPINDEX, + TI_GET_IS_REFERENCE, + TI_GET_INDIRECTVIRTUALBASECLASS, + TI_GET_VIRTUALBASETABLETYPE, + IMAGEHLP_SYMBOL_TYPE_INFO_MAX, +} IMAGEHLP_SYMBOL_TYPE_INFO; + +typedef struct _TI_FINDCHILDREN_PARAMS { + ULONG Count; + ULONG Start; + ULONG ChildId[1]; +} TI_FINDCHILDREN_PARAMS; + +BOOL +IMAGEAPI +SymGetTypeInfo( + _In_ HANDLE hProcess, + _In_ DWORD64 ModBase, + _In_ ULONG TypeId, + _In_ IMAGEHLP_SYMBOL_TYPE_INFO GetType, + _Out_ PVOID pInfo + ); + +#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001 +#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002 + +typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { + IN ULONG SizeOfStruct; + IN ULONG Flags; + IN ULONG NumIds; + IN PULONG TypeIds; + IN ULONG64 TagFilter; + IN ULONG NumReqs; + IN IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds; + IN PULONG_PTR ReqOffsets; + IN PULONG ReqSizes; + IN ULONG_PTR ReqStride; + IN ULONG_PTR BufferSize; + OUT PVOID Buffer; + OUT ULONG EntriesMatched; + OUT ULONG EntriesFilled; + OUT ULONG64 TagsFound; + OUT ULONG64 AllReqsValid; + IN ULONG NumReqsValid; + OUT PULONG64 ReqsValid OPTIONAL; +} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; + +BOOL +IMAGEAPI +SymGetTypeInfoEx( + _In_ HANDLE hProcess, + _In_ DWORD64 ModBase, + _Inout_ PIMAGEHLP_GET_TYPE_INFO_PARAMS Params + ); + +BOOL +IMAGEAPI +SymEnumTypes( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumTypesW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumTypesByName( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCSTR mask, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumTypesByNameW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCWSTR mask, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +BOOL +IMAGEAPI +SymGetTypeFromName( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PCSTR Name, + _Inout_ PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymGetTypeFromNameW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PCWSTR Name, + _Inout_ PSYMBOL_INFOW Symbol + ); + +BOOL +IMAGEAPI +SymAddSymbol( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PCSTR Name, + _In_ DWORD64 Address, + _In_ DWORD Size, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymAddSymbolW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PCWSTR Name, + _In_ DWORD64 Address, + _In_ DWORD Size, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymDeleteSymbol( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCSTR Name, + _In_ DWORD64 Address, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymDeleteSymbolW( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_opt_ PCWSTR Name, + _In_ DWORD64 Address, + _In_ DWORD Flags + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +BOOL +IMAGEAPI +SymRefreshModuleList( + _In_ HANDLE hProcess + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +BOOL +IMAGEAPI +SymAddSourceStream( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCSTR StreamFile, + _In_reads_bytes_opt_(Size) PBYTE Buffer, + _In_ size_t Size + ); + +typedef BOOL (WINAPI *SYMADDSOURCESTREAM)(HANDLE, ULONG64, PCSTR, PBYTE, size_t); + +BOOL +IMAGEAPI +SymAddSourceStreamA( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCSTR StreamFile, + _In_reads_bytes_opt_(Size) PBYTE Buffer, + _In_ size_t Size + ); + +typedef BOOL (WINAPI *SYMADDSOURCESTREAMA)(HANDLE, ULONG64, PCSTR, PBYTE, size_t); + +BOOL +IMAGEAPI +SymAddSourceStreamW( + _In_ HANDLE hProcess, + _In_ ULONG64 Base, + _In_opt_ PCWSTR FileSpec, + _In_reads_bytes_opt_(Size) PBYTE Buffer, + _In_ size_t Size + ); + +BOOL +IMAGEAPI +SymSrvIsStoreW( + _In_opt_ HANDLE hProcess, + _In_ PCWSTR path + ); + +BOOL +IMAGEAPI +SymSrvIsStore( + _In_opt_ HANDLE hProcess, + _In_ PCSTR path + ); + +PCSTR +IMAGEAPI +SymSrvDeltaName( + _In_ HANDLE hProcess, + _In_opt_ PCSTR SymPath, + _In_ PCSTR Type, + _In_ PCSTR File1, + _In_ PCSTR File2 + ); + +PCWSTR +IMAGEAPI +SymSrvDeltaNameW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR SymPath, + _In_ PCWSTR Type, + _In_ PCWSTR File1, + _In_ PCWSTR File2 + ); + +PCSTR +IMAGEAPI +SymSrvGetSupplement( + _In_ HANDLE hProcess, + _In_opt_ PCSTR SymPath, + _In_ PCSTR Node, + _In_ PCSTR File + ); + +PCWSTR +IMAGEAPI +SymSrvGetSupplementW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR SymPath, + _In_ PCWSTR Node, + _In_ PCWSTR File + ); + +BOOL +IMAGEAPI +SymSrvGetFileIndexes( + _In_ PCSTR File, + _Out_ GUID *Id, + _Out_ PDWORD Val1, + _Out_opt_ PDWORD Val2, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymSrvGetFileIndexesW( + _In_ PCWSTR File, + _Out_ GUID *Id, + _Out_ PDWORD Val1, + _Out_opt_ PDWORD Val2, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymSrvGetFileIndexStringW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR SrvPath, + _In_ PCWSTR File, + _Out_writes_(Size) PWSTR Index, + _In_ size_t Size, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymSrvGetFileIndexString( + _In_ HANDLE hProcess, + _In_opt_ PCSTR SrvPath, + _In_ PCSTR File, + _Out_writes_(Size) PSTR Index, + _In_ size_t Size, + _In_ DWORD Flags + ); + +typedef struct { + DWORD sizeofstruct; + char file[MAX_PATH +1]; + BOOL stripped; + DWORD timestamp; + DWORD size; + char dbgfile[MAX_PATH +1]; + char pdbfile[MAX_PATH + 1]; + GUID guid; + DWORD sig; + DWORD age; +} SYMSRV_INDEX_INFO, *PSYMSRV_INDEX_INFO; + +typedef struct { + DWORD sizeofstruct; + WCHAR file[MAX_PATH +1]; + BOOL stripped; + DWORD timestamp; + DWORD size; + WCHAR dbgfile[MAX_PATH +1]; + WCHAR pdbfile[MAX_PATH + 1]; + GUID guid; + DWORD sig; + DWORD age; +} SYMSRV_INDEX_INFOW, *PSYMSRV_INDEX_INFOW; + +BOOL +IMAGEAPI +SymSrvGetFileIndexInfo( + _In_ PCSTR File, + _Out_ PSYMSRV_INDEX_INFO Info, + _In_ DWORD Flags + ); + +BOOL +IMAGEAPI +SymSrvGetFileIndexInfoW( + _In_ PCWSTR File, + _Out_ PSYMSRV_INDEX_INFOW Info, + _In_ DWORD Flags + ); + +PCSTR +IMAGEAPI +SymSrvStoreSupplement( + _In_ HANDLE hProcess, + _In_opt_ PCSTR SrvPath, + _In_ PCSTR Node, + _In_ PCSTR File, + _In_ DWORD Flags + ); + +PCWSTR +IMAGEAPI +SymSrvStoreSupplementW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR SymPath, + _In_ PCWSTR Node, + _In_ PCWSTR File, + _In_ DWORD Flags + ); + +PCSTR +IMAGEAPI +SymSrvStoreFile( + _In_ HANDLE hProcess, + _In_opt_ PCSTR SrvPath, + _In_ PCSTR File, + _In_ DWORD Flags + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +PCWSTR +IMAGEAPI +SymSrvStoreFileW( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR SrvPath, + _In_ PCWSTR File, + _In_ DWORD Flags + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +// used by SymGetSymbolFile's "Type" parameter + +typedef enum { + sfImage = 0, + sfDbg, + sfPdb, + sfMpd, + sfMax +} IMAGEHLP_SF_TYPE; + +BOOL +IMAGEAPI +SymGetSymbolFile( + _In_opt_ HANDLE hProcess, + _In_opt_ PCSTR SymPath, + _In_ PCSTR ImageFile, + _In_ DWORD Type, + _Out_writes_(cSymbolFile) PSTR SymbolFile, + _In_ size_t cSymbolFile, + _Out_writes_(cDbgFile) PSTR DbgFile, + _In_ size_t cDbgFile + ); + +BOOL +IMAGEAPI +SymGetSymbolFileW( + _In_opt_ HANDLE hProcess, + _In_opt_ PCWSTR SymPath, + _In_ PCWSTR ImageFile, + _In_ DWORD Type, + _Out_writes_(cSymbolFile) PWSTR SymbolFile, + _In_ size_t cSymbolFile, + _Out_writes_(cDbgFile) PWSTR DbgFile, + _In_ size_t cDbgFile + ); + +// +// Full user-mode dump creation. +// + +typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)( + _In_ DWORD DataType, + _In_ PVOID* Data, + _Out_ LPDWORD DataLength, + _In_opt_ PVOID UserData + ); + +BOOL +WINAPI +DbgHelpCreateUserDump( + _In_opt_ LPCSTR FileName, + _In_ PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, + _In_opt_ PVOID UserData + ); + +BOOL +WINAPI +DbgHelpCreateUserDumpW( + _In_opt_ LPCWSTR FileName, + _In_ PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, + _In_opt_ PVOID UserData + ); + +// ----------------------------------------------------------------- +// The following 4 legacy APIs are fully supported, but newer +// ones are recommended. SymFromName and SymFromAddr provide +// much more detailed info on the returned symbol. + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family or Games Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +BOOL +IMAGEAPI +SymGetSymFromAddr64( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_opt_ PDWORD64 pdwDisplacement, + _Inout_ PIMAGEHLP_SYMBOL64 Symbol + ); + + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymFromAddr SymGetSymFromAddr64 +#else +BOOL +IMAGEAPI +SymGetSymFromAddr( + _In_ HANDLE hProcess, + _In_ DWORD dwAddr, + _Out_opt_ PDWORD pdwDisplacement, + _Inout_ PIMAGEHLP_SYMBOL Symbol + ); +#endif + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +// While following two APIs will provide a symbol from a name, +// SymEnumSymbols can provide the same matching information +// for ALL symbols with a matching name, even regular +// expressions. That way you can search across modules +// and differentiate between identically named symbols. + +BOOL +IMAGEAPI +SymGetSymFromName64( + _In_ HANDLE hProcess, + _In_ PCSTR Name, + _Inout_ PIMAGEHLP_SYMBOL64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymFromName SymGetSymFromName64 +#else +BOOL +IMAGEAPI +SymGetSymFromName( + _In_ HANDLE hProcess, + _In_ PCSTR Name, + _Inout_ PIMAGEHLP_SYMBOL Symbol + ); +#endif + + +// Symbol server exports + +// This is the version of the SYMSRV_EXTENDED_OUTPUT_DATA structure. +#define EXT_OUTPUT_VER 1 + +// This structure indicates the Extended Symsrv.dll output data structure +typedef struct +{ + DWORD sizeOfStruct; // size of the structure + DWORD version; // version number (EXT_OUTPUT_VER) + WCHAR filePtrMsg[MAX_PATH + 1]; // File ptr message data buffer +} SYMSRV_EXTENDED_OUTPUT_DATA, *PSYMSRV_EXTENDED_OUTPUT_DATA; + +typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROC)(PCSTR, PCSTR, PCSTR, PSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCA)(PCSTR, PCSTR, PCSTR, PSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCW)(PCWSTR, PCWSTR, PCWSTR, PWSTR); +typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID); +typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID); +typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64); +typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSWPROC)(UINT_PTR, ULONG64); +typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action, ULONG64 data, ULONG64 context); +typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)(); +typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROC)(PCSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROCA)(PCSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROCW)(PCWSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERGETVERSION)(LPAPI_VERSION); +typedef BOOL (WINAPI *PSYMBOLSERVERDELTANAME)(PCSTR, PVOID, DWORD, DWORD, PVOID, DWORD, DWORD, PSTR, size_t); +typedef BOOL (WINAPI *PSYMBOLSERVERDELTANAMEW)(PCWSTR, PVOID, DWORD, DWORD, PVOID, DWORD, DWORD, PWSTR, size_t); +typedef BOOL (WINAPI *PSYMBOLSERVERGETSUPPLEMENT)(PCSTR, PCSTR, PCSTR, PSTR, size_t); +typedef BOOL (WINAPI *PSYMBOLSERVERGETSUPPLEMENTW)(PCWSTR, PCWSTR, PCWSTR, PWSTR, size_t); +typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENT)(PCSTR, PCSTR, PCSTR, PSTR, size_t, DWORD); +typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENTW)(PCWSTR, PCWSTR, PCWSTR, PWSTR, size_t, DWORD); +typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRING)(PVOID, DWORD, DWORD, PSTR, size_t); +typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRINGW)(PVOID, DWORD, DWORD, PWSTR, size_t); +typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILE)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR, size_t, DWORD); +typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILEW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR, size_t, DWORD); +typedef BOOL (WINAPI *PSYMBOLSERVERISSTORE)(PCSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERISSTOREW)(PCWSTR); +typedef DWORD (WINAPI *PSYMBOLSERVERVERSION)(); +typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERMESSAGEPROC)(UINT_PTR action, ULONG64 data, ULONG64 context); +typedef BOOL (WINAPI *PSYMBOLSERVERWEXPROC)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR, PSYMSRV_EXTENDED_OUTPUT_DATA); +typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROCWEX)(PCWSTR); +typedef BOOL (WINAPI *PSYMBOLSERVERGETOPTIONDATAPROC)(UINT_PTR, PULONG64); +typedef BOOL (WINAPI *PSYMBOLSERVERSETHTTPAUTHHEADER)(_In_ PCWSTR pszAuthHeader); + +#define SYMSRV_VERSION 2 + +#define SSRVOPT_CALLBACK 0x00000001 +#define SSRVOPT_DWORD 0x00000002 +#define SSRVOPT_DWORDPTR 0x00000004 +#define SSRVOPT_GUIDPTR 0x00000008 +#define SSRVOPT_OLDGUIDPTR 0x00000010 +#define SSRVOPT_UNATTENDED 0x00000020 +#define SSRVOPT_NOCOPY 0x00000040 +#define SSRVOPT_GETPATH 0x00000040 +#define SSRVOPT_PARENTWIN 0x00000080 +#define SSRVOPT_PARAMTYPE 0x00000100 +#define SSRVOPT_SECURE 0x00000200 +#define SSRVOPT_TRACE 0x00000400 +#define SSRVOPT_SETCONTEXT 0x00000800 +#define SSRVOPT_PROXY 0x00001000 +#define SSRVOPT_DOWNSTREAM_STORE 0x00002000 +#define SSRVOPT_OVERWRITE 0x00004000 +#define SSRVOPT_RESETTOU 0x00008000 +#define SSRVOPT_CALLBACKW 0x00010000 +#define SSRVOPT_FLAT_DEFAULT_STORE 0x00020000 +#define SSRVOPT_PROXYW 0x00040000 +#define SSRVOPT_MESSAGE 0x00080000 +#define SSRVOPT_SERVICE 0x00100000 // deprecated +#define SSRVOPT_FAVOR_COMPRESSED 0x00200000 +#define SSRVOPT_STRING 0x00400000 +#define SSRVOPT_WINHTTP 0x00800000 +#define SSRVOPT_WININET 0x01000000 +#define SSRVOPT_DONT_UNCOMPRESS 0x02000000 +#define SSRVOPT_DISABLE_PING_HOST 0x04000000 +#define SSRVOPT_DISABLE_TIMEOUT 0x08000000 +#define SSRVOPT_ENABLE_COMM_MSG 0x10000000 +#define SSRVOPT_URI_FILTER 0x20000000 +#define SSRVOPT_URI_TIERS 0x40000000 +#define SSRVOPT_RETRY_APP_HANG 0x80000000 + +#define SSRVOPT_MAX 0x80000000 + +#define SSRVOPT_RESET ((ULONG_PTR)-1) + +#define NUM_SSRVOPTS 32 + +#define SSRVURI_HTTP_NORMAL 0x01 +#define SSRVURI_HTTP_COMPRESSED 0x02 +#define SSRVURI_HTTP_FILEPTR 0x04 + +#define SSRVURI_UNC_NORMAL 0x10 +#define SSRVURI_UNC_COMPRESSED 0x20 +#define SSRVURI_UNC_FILEPTR 0x40 + +#define SSRVURI_HTTP_MASK 0x0F +#define SSRVURI_UNC_MASK 0xF0 +#define SSRVURI_ALL 0xFF + +// Legacy Names +#define SSRVURI_NORMAL SSRVURI_HTTP_NORMAL +#define SSRVURI_COMPRESSED SSRVURI_HTTP_COMPRESSED +#define SSRVURI_FILEPTR SSRVURI_HTTP_FILEPTR + +#define SSRVACTION_TRACE 1 +#define SSRVACTION_QUERYCANCEL 2 +#define SSRVACTION_EVENT 3 +#define SSRVACTION_EVENTW 4 +#define SSRVACTION_SIZE 5 +#define SSRVACTION_HTTPSTATUS 6 +#define SSRVACTION_XMLOUTPUT 7 +#define SSRVACTION_CHECKSUMSTATUS 8 + +#endif WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) +#pragma endregion + +#pragma region Application Family or OneCore Family or Games Family +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) + + #define SYMSTOREOPT_COMPRESS 0x01 + #define SYMSTOREOPT_OVERWRITE 0x02 + #define SYMSTOREOPT_RETURNINDEX 0x04 + #define SYMSTOREOPT_POINTER 0x08 + #define SYMSTOREOPT_ALT_INDEX 0x10 + #define SYMSTOREOPT_UNICODE 0x20 + #define SYMSTOREOPT_PASS_IF_EXISTS 0x40 + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + +#ifdef DBGHELP_TRANSLATE_TCHAR + #define SymInitialize SymInitializeW + #define SymAddSymbol SymAddSymbolW + #define SymDeleteSymbol SymDeleteSymbolW + #define SearchTreeForFile SearchTreeForFileW + #define UnDecorateSymbolName UnDecorateSymbolNameW + #define SymGetLineFromName64 SymGetLineFromNameW64 + #define SymGetLineFromAddr64 SymGetLineFromAddrW64 + #define SymGetLineFromInlineContext SymGetLineFromInlineContextW + #define SymGetLineNext64 SymGetLineNextW64 + #define SymGetLinePrev64 SymGetLinePrevW64 + #define SymFromName SymFromNameW + #define SymFindExecutableImage SymFindExecutableImageW + #define FindExecutableImageEx FindExecutableImageExW + #define SymSearch SymSearchW + #define SymEnumLines SymEnumLinesW + #define SymEnumSourceLines SymEnumSourceLinesW + #define SymGetTypeFromName SymGetTypeFromNameW + #define SymEnumSymbolsForAddr SymEnumSymbolsForAddrW + #define SymFromAddr SymFromAddrW + #define SymFromInlineContext SymFromInlineContextW + #define SymMatchString SymMatchStringW + #define SymEnumSourceFiles SymEnumSourceFilesW + #define SymEnumSymbols SymEnumSymbolsW + #define SymEnumSymbolsEx SymEnumSymbolsExW + #define SymLoadModuleEx SymLoadModuleExW + #define SymSetSearchPath SymSetSearchPathW + #define SymGetSearchPath SymGetSearchPathW + #define EnumDirTree EnumDirTreeW + #define SymFromToken SymFromTokenW + #define SymFromIndex SymFromIndexW + #define SymGetScope SymGetScopeW + #define SymNext SymNextW + #define SymPrev SymPrevW + #define SymEnumTypes SymEnumTypesW + #define SymEnumTypesByName SymEnumTypesByNameW + #define SymRegisterCallback64 SymRegisterCallbackW64 + #define SymFindDebugInfoFile SymFindDebugInfoFileW + #define FindDebugInfoFileEx FindDebugInfoFileExW + #define SymFindFileInPath SymFindFileInPathW + #define SymEnumerateModules64 SymEnumerateModulesW64 + #define SymSetHomeDirectory SymSetHomeDirectoryW + #define SymGetHomeDirectory SymGetHomeDirectoryW + #define SymGetSourceFile SymGetSourceFileW + #define SymGetSourceFileToken SymGetSourceFileTokenW + #define SymGetSourceFileFromToken SymGetSourceFileFromTokenW + #define SymGetSourceVarFromToken SymGetSourceVarFromTokenW + #define SymGetSourceFileToken SymGetSourceFileTokenW + #define SymGetFileLineOffsets64 SymGetFileLineOffsetsW64 + #define SymFindFileInPath SymFindFileInPathW + #define SymMatchFileName SymMatchFileNameW + #define SymGetSourceFileFromToken SymGetSourceFileFromTokenW + #define SymGetSourceVarFromToken SymGetSourceVarFromTokenW + #define SymGetModuleInfo64 SymGetModuleInfoW64 + #define SymAddSourceStream SymAddSourceStreamW + #define SymSrvIsStore SymSrvIsStoreW + #define SymSrvDeltaName SymSrvDeltaNameW + #define SymSrvGetSupplement SymSrvGetSupplementW + #define SymSrvStoreSupplement SymSrvStoreSupplementW + #define SymSrvGetFileIndexes SymSrvGetFileIndexes + #define SymSrvGetFileIndexString SymSrvGetFileIndexStringW + #define SymSrvStoreFile SymSrvStoreFileW + #define SymGetSymbolFile SymGetSymbolFileW + #define EnumerateLoadedModules64 EnumerateLoadedModulesW64 + #define EnumerateLoadedModulesEx EnumerateLoadedModulesExW + #define SymSrvGetFileIndexInfo SymSrvGetFileIndexInfoW + + #define IMAGEHLP_LINE64 IMAGEHLP_LINEW64 + #define PIMAGEHLP_LINE64 PIMAGEHLP_LINEW64 + #define SYMBOL_INFO SYMBOL_INFOW + #define PSYMBOL_INFO PSYMBOL_INFOW + #define SYMBOL_INFO_PACKAGE SYMBOL_INFO_PACKAGEW + #define PSYMBOL_INFO_PACKAGE PSYMBOL_INFO_PACKAGEW + #define FIND_EXE_FILE_CALLBACK FIND_EXE_FILE_CALLBACKW + #define PFIND_EXE_FILE_CALLBACK PFIND_EXE_FILE_CALLBACKW + #define SYM_ENUMERATESYMBOLS_CALLBACK SYM_ENUMERATESYMBOLS_CALLBACKW + #define PSYM_ENUMERATESYMBOLS_CALLBACK PSYM_ENUMERATESYMBOLS_CALLBACKW + #define SRCCODEINFO SRCCODEINFOW + #define PSRCCODEINFO PSRCCODEINFOW + #define SOURCEFILE SOURCEFILEW + #define PSOURCEFILE PSOURCEFILEW + #define SYM_ENUMSOURECFILES_CALLBACK SYM_ENUMSOURCEFILES_CALLBACKW + #define PSYM_ENUMSOURCEFILES_CALLBACK PSYM_ENUMSOURECFILES_CALLBACKW + #define IMAGEHLP_CBA_EVENT IMAGEHLP_CBA_EVENTW + #define PIMAGEHLP_CBA_EVENT PIMAGEHLP_CBA_EVENTW + #define PENUMDIRTREE_CALLBACK PENUMDIRTREE_CALLBACKW + #define IMAGEHLP_DEFERRED_SYMBOL_LOAD64 IMAGEHLP_DEFERRED_SYMBOL_LOADW64 + #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 PIMAGEHLP_DEFERRED_SYMBOL_LOADW64 + #define PFIND_DEBUG_FILE_CALLBACK PFIND_DEBUG_FILE_CALLBACKW + #define PFINDFILEINPATHCALLBACK PFINDFILEINPATHCALLBACKW + #define IMAGEHLP_MODULE64 IMAGEHLP_MODULEW64 + #define PIMAGEHLP_MODULE64 PIMAGEHLP_MODULEW64 + #define SYMSRV_INDEX_INFO SYMSRV_INDEX_INFOW + #define PSYMSRV_INDEX_INFO PSYMSRV_INDEX_INFOW + + #define PSYMBOLSERVERPROC PSYMBOLSERVERPROCW + #define PSYMBOLSERVERPINGPROC PSYMBOLSERVERPINGPROCW + +#pragma endregion +#endif WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) + + +// ----------------------------------------------------------------- +// The following APIs exist only for backwards compatibility +// with a pre-release version documented in an MSDN release. + +// You should use SymFindFileInPath if you want to maintain +// future compatibility. + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +FindFileInPath( + _In_ HANDLE hprocess, + _In_ PCSTR SearchPath, + _In_ PCSTR FileName, + _In_ PVOID id, + _In_ DWORD two, + _In_ DWORD three, + _In_ DWORD flags, + _Out_writes_(MAX_PATH + 1) PSTR FilePath + ); + +// You should use SymFindFileInPath if you want to maintain +// future compatibility. + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +FindFileInSearchPath( + _In_ HANDLE hprocess, + _In_ PCSTR SearchPath, + _In_ PCSTR FileName, + _In_ DWORD one, + _In_ DWORD two, + _In_ DWORD three, + _Out_writes_(MAX_PATH + 1) PSTR FilePath + ); + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +SymEnumSym( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +SymEnumerateSymbols64( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +SymEnumerateSymbolsW64( + _In_ HANDLE hProcess, + _In_ ULONG64 BaseOfDll, + _In_ PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymEnumerateSymbols SymEnumerateSymbols64 +#define SymEnumerateSymbolsW SymEnumerateSymbolsW64 +#else +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +SymEnumerateSymbols( + _In_ HANDLE hProcess, + _In_ ULONG BaseOfDll, + _In_ PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +SymEnumerateSymbolsW( + _In_ HANDLE hProcess, + _In_ ULONG BaseOfDll, + _In_ PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, + _In_opt_ PVOID UserContext + ); +#endif + +// use SymLoadModuleEx + +DWORD64 +IMAGEAPI +SymLoadModule64( + _In_ HANDLE hProcess, + _In_opt_ HANDLE hFile, + _In_opt_ PCSTR ImageName, + _In_opt_ PCSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_ DWORD SizeOfDll + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymLoadModule SymLoadModule64 +#else +DWORD +IMAGEAPI +SymLoadModule( + _In_ HANDLE hProcess, + _In_opt_ HANDLE hFile, + _In_opt_ PCSTR ImageName, + _In_opt_ PCSTR ModuleName, + _In_ DWORD BaseOfDll, + _In_ DWORD SizeOfDll + ); +#endif + +BOOL +IMAGEAPI +SymGetSymNext64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOL64 Symbol + ); + +BOOL +IMAGEAPI +SymGetSymNextW64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOLW64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymNext SymGetSymNext64 +#define SymGetSymNextW SymGetSymNextW64 +#else +BOOL +IMAGEAPI +SymGetSymNext( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOL Symbol + ); + +BOOL +IMAGEAPI +SymGetSymNextW( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOLW Symbol + ); +#endif + +BOOL +IMAGEAPI +SymGetSymPrev64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOL64 Symbol + ); + +BOOL +IMAGEAPI +SymGetSymPrevW64( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOLW64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymPrev SymGetSymPrev64 +#define SymGetSymPrevW SymGetSymPrevW64 +#else +BOOL +IMAGEAPI +SymGetSymPrev( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOL Symbol + ); + +BOOL +IMAGEAPI +SymGetSymPrevW( + _In_ HANDLE hProcess, + _Inout_ PIMAGEHLP_SYMBOLW Symbol + ); +#endif + + +// This type indicates the call back function type +typedef ULONG (__stdcall *LPCALL_BACK_USER_INTERRUPT_ROUTINE )(VOID); + +// Extra data to report for the symbol load summary +typedef struct +{ + PCWSTR pBinPathNonExist; + PCWSTR pSymbolPathNonExist; +}DBGHELP_DATA_REPORT_STRUCT, *PDBGHELP_DATA_REPORT_STRUCT; + +void +IMAGEAPI +SetCheckUserInterruptShared( + _In_ LPCALL_BACK_USER_INTERRUPT_ROUTINE lpStartAddress + ); + +LPCALL_BACK_USER_INTERRUPT_ROUTINE +IMAGEAPI +GetCheckUserInterruptShared( + void + ); + +DWORD +IMAGEAPI +GetSymLoadError( + void + ); + +void +IMAGEAPI +SetSymLoadError( + _In_ DWORD error + ); + +BOOL +IMAGEAPI +ReportSymbolLoadSummary( + _In_ HANDLE hProcess, + _In_opt_ PCWSTR pLoadModule, + _In_ PDBGHELP_DATA_REPORT_STRUCT pSymbolData + ); + +void +IMAGEAPI +RemoveInvalidModuleList( + _In_ HANDLE hProcess + ); + +// These values should not be used. +// They have been replaced by SYMFLAG_ values. + +#define SYMF_OMAP_GENERATED 0x00000001 +#define SYMF_OMAP_MODIFIED 0x00000002 +#define SYMF_REGISTER 0x00000008 +#define SYMF_REGREL 0x00000010 +#define SYMF_FRAMEREL 0x00000020 +#define SYMF_PARAMETER 0x00000040 +#define SYMF_LOCAL 0x00000080 +#define SYMF_CONSTANT 0x00000100 +#define SYMF_EXPORT 0x00000200 +#define SYMF_FORWARDER 0x00000400 +#define SYMF_FUNCTION 0x00000800 +#define SYMF_VIRTUAL 0x00001000 +#define SYMF_THUNK 0x00002000 +#define SYMF_TLSREL 0x00004000 + +// These values should also not be used. +// They have been replaced by SYMFLAG_ values. + +#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 +#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER // 0x0008 +#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL // 0x0010 +#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL // 0x0020 +#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER // 0x0040 +#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL // 0x0080 +#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT // 0x0100 +#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION // 0x0800 +#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL // 0x1000 +#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK // 0x2000 +#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL // 0x4000 + +// +// RangeMap APIs. +// +PVOID +IMAGEAPI +RangeMapCreate( + VOID + ); + +VOID +IMAGEAPI +RangeMapFree( + _In_opt_ PVOID RmapHandle + ); + +#define IMAGEHLP_RMAP_MAPPED_FLAT 0x00000001 +#define IMAGEHLP_RMAP_BIG_ENDIAN 0x00000002 +#define IMAGEHLP_RMAP_IGNORE_MISCOMPARE 0x00000004 + +#define IMAGEHLP_RMAP_LOAD_RW_DATA_SECTIONS 0x20000000 +#define IMAGEHLP_RMAP_OMIT_SHARED_RW_DATA_SECTIONS 0x40000000 +#define IMAGEHLP_RMAP_FIXUP_IMAGEBASE 0x80000000 + +BOOL +IMAGEAPI +RangeMapAddPeImageSections( + _In_ PVOID RmapHandle, + _In_opt_ PCWSTR ImageName, + _In_reads_bytes_(MappingBytes) PVOID MappedImage, + _In_ DWORD MappingBytes, + _In_ DWORD64 ImageBase, + _In_ DWORD64 UserTag, + _In_ DWORD MappingFlags + ); + +BOOL +IMAGEAPI +RangeMapRemove( + _In_ PVOID RmapHandle, + _In_ DWORD64 UserTag + ); + +BOOL +IMAGEAPI +RangeMapRead( + _In_ PVOID RmapHandle, + _In_ DWORD64 Offset, + _Out_writes_bytes_to_(RequestBytes, *DoneBytes) PVOID Buffer, + _In_ DWORD RequestBytes, + _In_ DWORD Flags, + _Out_opt_ PDWORD DoneBytes + ); + +BOOL +IMAGEAPI +RangeMapWrite( + _In_ PVOID RmapHandle, + _In_ DWORD64 Offset, + _In_reads_bytes_(RequestBytes) PVOID Buffer, + _In_ DWORD RequestBytes, + _In_ DWORD Flags, + _Out_opt_ PDWORD DoneBytes + ); + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS | WINAPI_PARTITION_GAMES) + +#ifdef __cplusplus +} +#endif + +#include + + +#include + + +#endif /* WINAPI_FAMILY_PARTITION(NONGAMESPARTITIONS) */ +#pragma endregion + +#endif // _DBGHELP_ diff --git a/src/archutils/Win32/ddk/hidsdi.h b/src/archutils/Win32/ddk/hidsdi.h index ae0ef12932..925e26cd9b 100644 --- a/src/archutils/Win32/ddk/hidsdi.h +++ b/src/archutils/Win32/ddk/hidsdi.h @@ -1,413 +1,520 @@ -/*++ - -Copyright (c) 1996 Microsoft Corporation - -Module Name: - - HIDSDI.H - -Abstract: - - This module contains the PUBLIC definitions for the - code that implements the HID dll. - -Environment: - - Kernel & user mode - ---*/ - - -#ifndef _HIDSDI_H -#define _HIDSDI_H - -#include - -//#include "wtypes.h" - -//#include -//#include -//#include - -typedef LONG NTSTATUS; -#include "hidusage.h" -#include "hidpi.h" - -typedef struct _HIDD_CONFIGURATION { - PVOID cookie; - ULONG size; - ULONG RingBufferSize; -} HIDD_CONFIGURATION, *PHIDD_CONFIGURATION; - -typedef struct _HIDD_ATTRIBUTES { - ULONG Size; // = sizeof (struct _HIDD_ATTRIBUTES) - - // - // Vendor ids of this hid device - // - USHORT VendorID; - USHORT ProductID; - USHORT VersionNumber; - - // - // Additional fields will be added to the end of this structure. - // -} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; - - -BOOLEAN __stdcall -HidD_GetAttributes ( - IN HANDLE HidDeviceObject, - OUT PHIDD_ATTRIBUTES Attributes - ); -/*++ -Routine Description: - Fill in the given HIDD_ATTRIBUTES structure with the attributes of the - given hid device. - ---*/ - - -void __stdcall -HidD_GetHidGuid ( - OUT LPGUID HidGuid - ); - -BOOLEAN __stdcall -HidD_GetPreparsedData ( - IN HANDLE HidDeviceObject, - OUT PHIDP_PREPARSED_DATA * PreparsedData - ); -/*++ -Routine Description: - Given a handle to a valid Hid Class Device Object, retrieve the preparsed - data for the device. This routine will allocate the appropriately - sized buffer to hold this preparsed data. It is up to client to call - HidP_FreePreparsedData to free the memory allocated to this structure when - it is no longer needed. - -Arguments: - HidDeviceObject A handle to a Hid Device that the client obtains using - a call to CreateFile on a valid Hid device string name. - The string name can be obtained using standard PnP calls. - - PreparsedData An opaque data structure used by other functions in this - library to retrieve information about a given device. - -Return Value: - TRUE if successful. - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_FreePreparsedData ( - IN PHIDP_PREPARSED_DATA PreparsedData - ); - -BOOLEAN __stdcall -HidD_FlushQueue ( - IN HANDLE HidDeviceObject - ); -/*++ -Routine Description: - Flush the input queue for the given HID device. - -Arguments: - HidDeviceObject A handle to a Hid Device that the client obtains using - a call to CreateFile on a valid Hid device string name. - The string name can be obtained using standard PnP calls. - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetConfiguration ( - IN HANDLE HidDeviceObject, - OUT PHIDD_CONFIGURATION Configuration, - IN ULONG ConfigurationLength - ); -/*++ -Routine Description: - Get the configuration information for this Hid device - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - Configuration A configuration structure. HidD_GetConfiguration MUST - be called before the configuration can be modified and - set using HidD_SetConfiguration - - ConfigurationLength That is ``sizeof (HIDD_CONFIGURATION)''. Using this - parameter, we can later increase the length of the - configuration array and not break older apps. - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_SetConfiguration ( - IN HANDLE HidDeviceObject, - IN PHIDD_CONFIGURATION Configuration, - IN ULONG ConfigurationLength - ); -/*++ -Routine Description: - Set the configuration information for this Hid device... - - NOTE: HidD_GetConfiguration must be called to retrieve the current - configuration information before this information can be modified - and set. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - Configuration A configuration structure. HidD_GetConfiguration MUST - be called before the configuration can be modified and - set using HidD_SetConfiguration - - ConfigurationLength That is ``sizeof (HIDD_CONFIGURATION)''. Using this - parameter, we can later increase the length of the - configuration array and not break older apps. - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetFeature ( - IN HANDLE HidDeviceObject, - OUT PVOID ReportBuffer, - IN ULONG ReportBufferLength - ); -/*++ -Routine Description: - Retrieve a feature report from a HID device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - ReportBuffer The buffer that the feature report should be placed - into. The first byte of the buffer should be set to - the report ID of the desired report - - ReportBufferLength The size (in bytes) of ReportBuffer. This value - should be greater than or equal to the - FeatureReportByteLength field as specified in the - HIDP_CAPS structure for the device -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_SetFeature ( - IN HANDLE HidDeviceObject, - IN PVOID ReportBuffer, - IN ULONG ReportBufferLength - ); -/*++ -Routine Description: - Send a feature report to a HID device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - ReportBuffer The buffer of the feature report to send to the device - - ReportBufferLength The size (in bytes) of ReportBuffer. This value - should be greater than or equal to the - FeatureReportByteLength field as specified in the - HIDP_CAPS structure for the device -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetNumInputBuffers ( - IN HANDLE HidDeviceObject, - OUT PULONG NumberBuffers - ); -/*++ -Routine Description: - This function returns the number of input buffers used by the specified - file handle to the Hid device. Each file object has a number of buffers - associated with it to queue reports read from the device but which have - not yet been read by the user-mode app with a handle to that device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - NumberBuffers Number of buffers currently being used for this file - handle to the Hid device - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_SetNumInputBuffers ( - IN HANDLE HidDeviceObject, - OUT ULONG NumberBuffers - ); -/*++ - -Routine Description: - This function sets the number of input buffers used by the specified - file handle to the Hid device. Each file object has a number of buffers - associated with it to queue reports read from the device but which have - not yet been read by the user-mode app with a handle to that device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - NumberBuffers New number of buffers to use for this file handle to - the Hid device - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetPhysicalDescriptor ( - IN HANDLE HidDeviceObject, - OUT PVOID Buffer, - IN ULONG BufferLength - ); -/*++ -Routine Description: - This function retrieves the raw physical descriptor for the specified - Hid device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - Buffer Buffer which on return will contain the physical - descriptor if one exists for the specified device - handle - - BufferLength Length of buffer (in bytes) - - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetManufacturerString ( - IN HANDLE HidDeviceObject, - OUT PVOID Buffer, - IN ULONG BufferLength - ); -/*++ -Routine Description: - This function retrieves the manufacturer string from the specified - Hid device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - Buffer Buffer which on return will contain the manufacturer - string returned from the device. This string is a - wide-character string - - BufferLength Length of Buffer (in bytes) - - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetProductString ( - IN HANDLE HidDeviceObject, - OUT PVOID Buffer, - IN ULONG BufferLength - ); -/*++ -Routine Description: - This function retrieves the product string from the specified - Hid device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - Buffer Buffer which on return will contain the product - string returned from the device. This string is a - wide-character string - - BufferLength Length of Buffer (in bytes) - - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetIndexedString ( - IN HANDLE HidDeviceObject, - IN ULONG StringIndex, - OUT PVOID Buffer, - IN ULONG BufferLength - ); -/*++ -Routine Description: - This function retrieves a string from the specified Hid device that is - specified with a certain string index. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - StringIndex Index of the string to retrieve - - Buffer Buffer which on return will contain the product - string returned from the device. This string is a - wide-character string - - BufferLength Length of Buffer (in bytes) - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - -BOOLEAN __stdcall -HidD_GetSerialNumberString ( - IN HANDLE HidDeviceObject, - OUT PVOID Buffer, - IN ULONG BufferLength - ); -/*++ -Routine Description: - This function retrieves the serial number string from the specified - Hid device. - -Arguments: - HidDeviceObject A handle to a Hid Device Object. - - Buffer Buffer which on return will contain the serial number - string returned from the device. This string is a - wide-character string - - BufferLength Length of Buffer (in bytes) - -Return Value: - TRUE if successful - FALSE otherwise -- Use GetLastError() to get extended error information ---*/ - - -#include - -#endif - +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + HIDSDI.H + +Abstract: + + This module contains the PUBLIC definitions for the + code that implements the HID dll. + +Environment: + + Kernel & user mode + +--*/ + + +#ifndef _HIDSDI_H +#define _HIDSDI_H +#include + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef _Return_type_success_(return >= 0) LONG NTSTATUS; +#include "hidusage.h" +#include "hidpi.h" + +typedef struct _HIDD_CONFIGURATION { + PVOID cookie; + ULONG size; + ULONG RingBufferSize; +} HIDD_CONFIGURATION, *PHIDD_CONFIGURATION; + +typedef struct _HIDD_ATTRIBUTES { + ULONG Size; // = sizeof (struct _HIDD_ATTRIBUTES) + + // + // Vendor ids of this hid device + // + USHORT VendorID; + USHORT ProductID; + USHORT VersionNumber; + + // + // Additional fields will be added to the end of this structure. + // +} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; + +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetAttributes ( + _In_ HANDLE HidDeviceObject, + _Out_ PHIDD_ATTRIBUTES Attributes + ); +/*++ +Routine Description: + Fill in the given HIDD_ATTRIBUTES structure with the attributes of the + given hid device. + +--*/ + + +void __stdcall +HidD_GetHidGuid ( + _Out_ LPGUID HidGuid + ); + +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetPreparsedData ( + _In_ HANDLE HidDeviceObject, + _Out_ _When_(return!=0, __drv_allocatesMem(Mem)) PHIDP_PREPARSED_DATA * PreparsedData + ); +/*++ +Routine Description: + Given a handle to a valid Hid Class Device Object, retrieve the preparsed + data for the device. This routine will allocate the appropriately + sized buffer to hold this preparsed data. It is up to client to call + HidP_FreePreparsedData to free the memory allocated to this structure when + it is no longer needed. + +Arguments: + HidDeviceObject A handle to a Hid Device that the client obtains using + a call to CreateFile on a valid Hid device string name. + The string name can be obtained using standard PnP calls. + + PreparsedData An opaque data structure used by other functions in this + library to retrieve information about a given device. + +Return Value: + TRUE if successful. + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_FreePreparsedData ( + _In_ __drv_freesMem(Mem) PHIDP_PREPARSED_DATA PreparsedData + ); + +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_FlushQueue ( + _In_ HANDLE HidDeviceObject + ); +/*++ +Routine Description: + Flush the input queue for the given HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device that the client obtains using + a call to CreateFile on a valid Hid device string name. + The string name can be obtained using standard PnP calls. + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetConfiguration ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(ConfigurationLength) PHIDD_CONFIGURATION Configuration, + _In_ ULONG ConfigurationLength + ); +/*++ +Routine Description: + Get the configuration information for this Hid device + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Configuration A configuration structure. HidD_GetConfiguration MUST + be called before the configuration can be modified and + set using HidD_SetConfiguration + + ConfigurationLength That is ``sizeof (HIDD_CONFIGURATION)''. Using this + parameter, we can later increase the length of the + configuration array and not break older apps. + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_SetConfiguration ( + _In_ HANDLE HidDeviceObject, + _In_reads_bytes_(ConfigurationLength) PHIDD_CONFIGURATION Configuration, + _In_ ULONG ConfigurationLength + ); +/*++ +Routine Description: + Set the configuration information for this Hid device... + + NOTE: HidD_GetConfiguration must be called to retrieve the current + configuration information before this information can be modified + and set. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Configuration A configuration structure. HidD_GetConfiguration MUST + be called before the configuration can be modified and + set using HidD_SetConfiguration + + ConfigurationLength That is ``sizeof (HIDD_CONFIGURATION)''. Using this + parameter, we can later increase the length of the + configuration array and not break older apps. + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetFeature ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(ReportBufferLength) PVOID ReportBuffer, + _In_ ULONG ReportBufferLength + ); +/*++ +Routine Description: + Retrieve a feature report from a HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + ReportBuffer The buffer that the feature report should be placed + into. The first byte of the buffer should be set to + the report ID of the desired report + + ReportBufferLength The size (in bytes) of ReportBuffer. This value + should be greater than or equal to the + FeatureReportByteLength field as specified in the + HIDP_CAPS structure for the device +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_SetFeature ( + _In_ HANDLE HidDeviceObject, + _In_reads_bytes_(ReportBufferLength) PVOID ReportBuffer, + _In_ ULONG ReportBufferLength + ); +/*++ +Routine Description: + Send a feature report to a HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + ReportBuffer The buffer of the feature report to send to the device + + ReportBufferLength The size (in bytes) of ReportBuffer. This value + should be greater than or equal to the + FeatureReportByteLength field as specified in the + HIDP_CAPS structure for the device +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +#if (NTDDI_VERSION >= NTDDI_WINXP) +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetInputReport ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(ReportBufferLength) PVOID ReportBuffer, + _In_ ULONG ReportBufferLength + ); +/*++ +Routine Description: + Retrieve an input report from a HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + ReportBuffer The buffer that the input report should be placed + into. The first byte of the buffer should be set to + the report ID of the desired report + + ReportBufferLength The size (in bytes) of ReportBuffer. This value + should be greater than or equal to the + InputReportByteLength field as specified in the + HIDP_CAPS structure for the device +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_SetOutputReport ( + _In_ HANDLE HidDeviceObject, + _In_reads_bytes_(ReportBufferLength) PVOID ReportBuffer, + _In_ ULONG ReportBufferLength + ); +/*++ +Routine Description: + Send an output report to a HID device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + ReportBuffer The buffer of the output report to send to the device + + ReportBufferLength The size (in bytes) of ReportBuffer. This value + should be greater than or equal to the + OutputReportByteLength field as specified in the + HIDP_CAPS structure for the device +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +#endif +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetNumInputBuffers ( + _In_ HANDLE HidDeviceObject, + _Out_ PULONG NumberBuffers + ); +/*++ +Routine Description: + This function returns the number of input buffers used by the specified + file handle to the Hid device. Each file object has a number of buffers + associated with it to queue reports read from the device but which have + not yet been read by the user-mode app with a handle to that device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + NumberBuffers Number of buffers currently being used for this file + handle to the Hid device + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_SetNumInputBuffers ( + _In_ HANDLE HidDeviceObject, + _In_ ULONG NumberBuffers + ); +/*++ + +Routine Description: + This function sets the number of input buffers used by the specified + file handle to the Hid device. Each file object has a number of buffers + associated with it to queue reports read from the device but which have + not yet been read by the user-mode app with a handle to that device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + NumberBuffers New number of buffers to use for this file handle to + the Hid device + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetPhysicalDescriptor ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the raw physical descriptor for the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the physical + descriptor if one exists for the specified device + handle + + BufferLength Length of buffer (in bytes) + + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetManufacturerString ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the manufacturer string from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the manufacturer + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetProductString ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the product string from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the product + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetIndexedString ( + _In_ HANDLE HidDeviceObject, + _In_ ULONG StringIndex, + _Out_writes_bytes_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves a string from the specified Hid device that is + specified with a certain string index. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + StringIndex Index of the string to retrieve + + Buffer Buffer which on return will contain the product + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetSerialNumberString ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the serial number string from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the serial number + string returned from the device. This string is a + wide-character string + + BufferLength Length of Buffer (in bytes) + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ + +#if (NTDDI_VERSION >= NTDDI_WINXP) +_Must_inspect_result_ +_Success_(return==TRUE) +BOOLEAN __stdcall +HidD_GetMsGenreDescriptor ( + _In_ HANDLE HidDeviceObject, + _Out_writes_bytes_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength + ); +/*++ +Routine Description: + This function retrieves the Microsoft Genre descriptor from the specified + Hid device. + +Arguments: + HidDeviceObject A handle to a Hid Device Object. + + Buffer Buffer which on return will contain the descriptor + returned from the device. + + BufferLength Length of Buffer (in bytes) + +Return Value: + TRUE if successful + FALSE otherwise -- Use GetLastError() to get extended error information +--*/ +#endif + + +#include + +#ifdef __cplusplus +} +#endif + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ +#pragma endregion + +#endif diff --git a/src/archutils/Win32/ddk/hidusage.h b/src/archutils/Win32/ddk/hidusage.h index 6ee6890f93..c4c31e5bb6 100644 --- a/src/archutils/Win32/ddk/hidusage.h +++ b/src/archutils/Win32/ddk/hidusage.h @@ -1,265 +1,3017 @@ -/*++ - -Copyright (c) 1996, 1997 Microsoft Corporation - -Module Name: - - HIDUSAGE.H - -Abstract: - - Public Definitions of HID USAGES. - -Environment: - - Kernel & user mode - ---*/ - -#ifndef __HIDUSAGE_H__ -#define __HIDUSAGE_H__ - -// -// Usage Pages -// - -typedef USHORT USAGE, *PUSAGE; - -#define HID_USAGE_PAGE_GENERIC ((USAGE) 0x01) -#define HID_USAGE_PAGE_SIMULATION ((USAGE) 0x02) -#define HID_USAGE_PAGE_VR ((USAGE) 0x03) -#define HID_USAGE_PAGE_SPORT ((USAGE) 0x04) -#define HID_USAGE_PAGE_GAME ((USAGE) 0x05) -#define HID_USAGE_PAGE_KEYBOARD ((USAGE) 0x07) -#define HID_USAGE_PAGE_LED ((USAGE) 0x08) -#define HID_USAGE_PAGE_BUTTON ((USAGE) 0x09) -#define HID_USAGE_PAGE_ORDINAL ((USAGE) 0x0A) -#define HID_USAGE_PAGE_TELEPHONY ((USAGE) 0x0B) -#define HID_USAGE_PAGE_CONSUMER ((USAGE) 0x0C) -#define HID_USAGE_PAGE_DIGITIZER ((USAGE) 0x0D) -#define HID_USAGE_PAGE_UNICODE ((USAGE) 0x10) -#define HID_USAGE_PAGE_ALPHANUMERIC ((USAGE) 0x14) - - -// -// Usages from Generic Desktop Page (0x01) -// - -#define HID_USAGE_GENERIC_POINTER ((USAGE) 0x01) -#define HID_USAGE_GENERIC_MOUSE ((USAGE) 0x02) -#define HID_USAGE_GENERIC_JOYSTICK ((USAGE) 0x04) -#define HID_USAGE_GENERIC_GAMEPAD ((USAGE) 0x05) -#define HID_USAGE_GENERIC_KEYBOARD ((USAGE) 0x06) -#define HID_USAGE_GENERIC_KEYPAD ((USAGE) 0x07) -#define HID_USAGE_GENERIC_SYSTEM_CTL ((USAGE) 0x80) - -#define HID_USAGE_GENERIC_X ((USAGE) 0x30) -#define HID_USAGE_GENERIC_Y ((USAGE) 0x31) -#define HID_USAGE_GENERIC_Z ((USAGE) 0x32) -#define HID_USAGE_GENERIC_RX ((USAGE) 0x33) -#define HID_USAGE_GENERIC_RY ((USAGE) 0x34) -#define HID_USAGE_GENERIC_RZ ((USAGE) 0x35) -#define HID_USAGE_GENERIC_SLIDER ((USAGE) 0x36) -#define HID_USAGE_GENERIC_DIAL ((USAGE) 0x37) -#define HID_USAGE_GENERIC_WHEEL ((USAGE) 0x38) -#define HID_USAGE_GENERIC_HATSWITCH ((USAGE) 0x39) -#define HID_USAGE_GENERIC_COUNTED_BUFFER ((USAGE) 0x3A) -#define HID_USAGE_GENERIC_BYTE_COUNT ((USAGE) 0x3B) -#define HID_USAGE_GENERIC_MOTION_WAKEUP ((USAGE) 0x3C) -#define HID_USAGE_GENERIC_VX ((USAGE) 0x40) -#define HID_USAGE_GENERIC_VY ((USAGE) 0x41) -#define HID_USAGE_GENERIC_VZ ((USAGE) 0x42) -#define HID_USAGE_GENERIC_VBRX ((USAGE) 0x43) -#define HID_USAGE_GENERIC_VBRY ((USAGE) 0x44) -#define HID_USAGE_GENERIC_VBRZ ((USAGE) 0x45) -#define HID_USAGE_GENERIC_VNO ((USAGE) 0x46) -#define HID_USAGE_GENERIC_SYSCTL_POWER ((USAGE) 0x81) -#define HID_USAGE_GENERIC_SYSCTL_SLEEP ((USAGE) 0x82) -#define HID_USAGE_GENERIC_SYSCTL_WAKE ((USAGE) 0x83) -#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x84) -#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU ((USAGE) 0x85) -#define HID_USAGE_GENERIC_SYSCTL_APP_MENU ((USAGE) 0x86) -#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU ((USAGE) 0x87) -#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT ((USAGE) 0x88) -#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT ((USAGE) 0x89) -#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT ((USAGE) 0x8A) -#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT ((USAGE) 0x8B) -#define HID_USAGE_GENERIC_SYSCTL_MENU_UP ((USAGE) 0x8C) -#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN ((USAGE) 0x8D) - -// -// Usages from Simulation Controls Page (0x02) -// - -#define HID_USAGE_SIMULATION_RUDDER ((USAGE) 0xBA) -#define HID_USAGE_SIMULATION_THROTTLE ((USAGE) 0xBB) - -// -// Virtual Reality Controls Page (0x03) -// - - -// -// Sport Controls Page (0x04) -// - - -// -// Game Controls Page (0x05) -// - - -// -// Keyboard/Keypad Page (0x07) -// - - // Error "keys" -#define HID_USAGE_KEYBOARD_NOEVENT ((USAGE) 0x00) -#define HID_USAGE_KEYBOARD_ROLLOVER ((USAGE) 0x01) -#define HID_USAGE_KEYBOARD_POSTFAIL ((USAGE) 0x02) -#define HID_USAGE_KEYBOARD_UNDEFINED ((USAGE) 0x03) - - // Letters -#define HID_USAGE_KEYBOARD_aA ((USAGE) 0x04) -#define HID_USAGE_KEYBOARD_zZ ((USAGE) 0x1D) - // Numbers -#define HID_USAGE_KEYBOARD_ONE ((USAGE) 0x1E) -#define HID_USAGE_KEYBOARD_ZERO ((USAGE) 0x27) - // Modifier Keys -#define HID_USAGE_KEYBOARD_LCTRL ((USAGE) 0xE0) -#define HID_USAGE_KEYBOARD_LSHFT ((USAGE) 0xE1) -#define HID_USAGE_KEYBOARD_LALT ((USAGE) 0xE2) -#define HID_USAGE_KEYBOARD_LGUI ((USAGE) 0xE3) -#define HID_USAGE_KEYBOARD_RCTRL ((USAGE) 0xE4) -#define HID_USAGE_KEYBOARD_RSHFT ((USAGE) 0xE5) -#define HID_USAGE_KEYBOARD_RALT ((USAGE) 0xE6) -#define HID_USAGE_KEYBOARD_RGUI ((USAGE) 0xE7) -#define HID_USAGE_KEYBOARD_SCROLL_LOCK ((USAGE) 0x47) -#define HID_USAGE_KEYBOARD_NUM_LOCK ((USAGE) 0x53) -#define HID_USAGE_KEYBOARD_CAPS_LOCK ((USAGE) 0x39) - // Funtion keys -#define HID_USAGE_KEYBOARD_F1 ((USAGE) 0x3A) -#define HID_USAGE_KEYBOARD_F12 ((USAGE) 0x45) - -#define HID_USAGE_KEYBOARD_RETURN ((USAGE) 0x28) -#define HID_USAGE_KEYBOARD_ESCAPE ((USAGE) 0x29) -#define HID_USAGE_KEYBOARD_DELETE ((USAGE) 0x2A) - -#define HID_USAGE_KEYBOARD_PRINT_SCREEN ((USAGE) 0x46) - -// and hundreds more... - -// -// LED Page (0x08) -// - -#define HID_USAGE_LED_NUM_LOCK ((USAGE) 0x01) -#define HID_USAGE_LED_CAPS_LOCK ((USAGE) 0x02) -#define HID_USAGE_LED_SCROLL_LOCK ((USAGE) 0x03) -#define HID_USAGE_LED_COMPOSE ((USAGE) 0x04) -#define HID_USAGE_LED_KANA ((USAGE) 0x05) -#define HID_USAGE_LED_POWER ((USAGE) 0x06) -#define HID_USAGE_LED_SHIFT ((USAGE) 0x07) -#define HID_USAGE_LED_DO_NOT_DISTURB ((USAGE) 0x08) -#define HID_USAGE_LED_MUTE ((USAGE) 0x09) -#define HID_USAGE_LED_TONE_ENABLE ((USAGE) 0x0A) -#define HID_USAGE_LED_HIGH_CUT_FILTER ((USAGE) 0x0B) -#define HID_USAGE_LED_LOW_CUT_FILTER ((USAGE) 0x0C) -#define HID_USAGE_LED_EQUALIZER_ENABLE ((USAGE) 0x0D) -#define HID_USAGE_LED_SOUND_FIELD_ON ((USAGE) 0x0E) -#define HID_USAGE_LED_SURROUND_FIELD_ON ((USAGE) 0x0F) -#define HID_USAGE_LED_REPEAT ((USAGE) 0x10) -#define HID_USAGE_LED_STEREO ((USAGE) 0x11) -#define HID_USAGE_LED_SAMPLING_RATE_DETECT ((USAGE) 0x12) -#define HID_USAGE_LED_SPINNING ((USAGE) 0x13) -#define HID_USAGE_LED_CAV ((USAGE) 0x14) -#define HID_USAGE_LED_CLV ((USAGE) 0x15) -#define HID_USAGE_LED_RECORDING_FORMAT_DET ((USAGE) 0x16) -#define HID_USAGE_LED_OFF_HOOK ((USAGE) 0x17) -#define HID_USAGE_LED_RING ((USAGE) 0x18) -#define HID_USAGE_LED_MESSAGE_WAITING ((USAGE) 0x19) -#define HID_USAGE_LED_DATA_MODE ((USAGE) 0x1A) -#define HID_USAGE_LED_BATTERY_OPERATION ((USAGE) 0x1B) -#define HID_USAGE_LED_BATTERY_OK ((USAGE) 0x1C) -#define HID_USAGE_LED_BATTERY_LOW ((USAGE) 0x1D) -#define HID_USAGE_LED_SPEAKER ((USAGE) 0x1E) -#define HID_USAGE_LED_HEAD_SET ((USAGE) 0x1F) -#define HID_USAGE_LED_HOLD ((USAGE) 0x20) -#define HID_USAGE_LED_MICROPHONE ((USAGE) 0x21) -#define HID_USAGE_LED_COVERAGE ((USAGE) 0x22) -#define HID_USAGE_LED_NIGHT_MODE ((USAGE) 0x23) -#define HID_USAGE_LED_SEND_CALLS ((USAGE) 0x24) -#define HID_USAGE_LED_CALL_PICKUP ((USAGE) 0x25) -#define HID_USAGE_LED_CONFERENCE ((USAGE) 0x26) -#define HID_USAGE_LED_STAND_BY ((USAGE) 0x27) -#define HID_USAGE_LED_CAMERA_ON ((USAGE) 0x28) -#define HID_USAGE_LED_CAMERA_OFF ((USAGE) 0x29) -#define HID_USAGE_LED_ON_LINE ((USAGE) 0x2A) -#define HID_USAGE_LED_OFF_LINE ((USAGE) 0x2B) -#define HID_USAGE_LED_BUSY ((USAGE) 0x2C) -#define HID_USAGE_LED_READY ((USAGE) 0x2D) -#define HID_USAGE_LED_PAPER_OUT ((USAGE) 0x2E) -#define HID_USAGE_LED_PAPER_JAM ((USAGE) 0x2F) -#define HID_USAGE_LED_REMOTE ((USAGE) 0x30) -#define HID_USAGE_LED_FORWARD ((USAGE) 0x31) -#define HID_USAGE_LED_REVERSE ((USAGE) 0x32) -#define HID_USAGE_LED_STOP ((USAGE) 0x33) -#define HID_USAGE_LED_REWIND ((USAGE) 0x34) -#define HID_USAGE_LED_FAST_FORWARD ((USAGE) 0x35) -#define HID_USAGE_LED_PLAY ((USAGE) 0x36) -#define HID_USAGE_LED_PAUSE ((USAGE) 0x37) -#define HID_USAGE_LED_RECORD ((USAGE) 0x38) -#define HID_USAGE_LED_ERROR ((USAGE) 0x39) -#define HID_USAGE_LED_SELECTED_INDICATOR ((USAGE) 0x3A) -#define HID_USAGE_LED_IN_USE_INDICATOR ((USAGE) 0x3B) -#define HID_USAGE_LED_MULTI_MODE_INDICATOR ((USAGE) 0x3C) -#define HID_USAGE_LED_INDICATOR_ON ((USAGE) 0x3D) -#define HID_USAGE_LED_INDICATOR_FLASH ((USAGE) 0x3E) -#define HID_USAGE_LED_INDICATOR_SLOW_BLINK ((USAGE) 0x3F) -#define HID_USAGE_LED_INDICATOR_FAST_BLINK ((USAGE) 0x40) -#define HID_USAGE_LED_INDICATOR_OFF ((USAGE) 0x41) -#define HID_USAGE_LED_FLASH_ON_TIME ((USAGE) 0x42) -#define HID_USAGE_LED_SLOW_BLINK_ON_TIME ((USAGE) 0x43) -#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME ((USAGE) 0x44) -#define HID_USAGE_LED_FAST_BLINK_ON_TIME ((USAGE) 0x45) -#define HID_USAGE_LED_FAST_BLINK_OFF_TIME ((USAGE) 0x46) -#define HID_USAGE_LED_INDICATOR_COLOR ((USAGE) 0x47) -#define HID_USAGE_LED_RED ((USAGE) 0x48) -#define HID_USAGE_LED_GREEN ((USAGE) 0x49) -#define HID_USAGE_LED_AMBER ((USAGE) 0x4A) -#define HID_USAGE_LED_GENERIC_INDICATOR ((USAGE) 0x3B) - -// -// Button Page (0x09) -// -// There is no need to label these usages. -// - - -// -// Ordinal Page (0x0A) -// -// There is no need to label these usages. -// - - -// -// Telephony Device Page (0x0B) -// - -#define HID_USAGE_TELEPHONY_PHONE ((USAGE) 0x01) -#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE ((USAGE) 0x02) -#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS ((USAGE) 0x03) -#define HID_USAGE_TELEPHONY_HANDSET ((USAGE) 0x04) -#define HID_USAGE_TELEPHONY_HEADSET ((USAGE) 0x05) -#define HID_USAGE_TELEPHONY_KEYPAD ((USAGE) 0x06) -#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x07) - -// -// and others... -// - - -#endif - - +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + HIDUSAGE.H + +Abstract: + + Public Definitions of HID USAGES for HID Usage Tables 1.4 + +Environment: + + Kernel & user mode + +--*/ + +#ifndef __HIDUSAGE_H__ +#define __HIDUSAGE_H__ + +// +// Usage Pages +// + +typedef USHORT USAGE, *PUSAGE; + +typedef LONG USAGE_VALUE, *PUSAGE_VALUE; + +#define HID_USAGE_PAGE_UNDEFINED ((USAGE) 0x0000) +#define HID_USAGE_PAGE_ARCADE ((USAGE) 0x0091) +#define HID_USAGE_PAGE_ALPHANUMERIC ((USAGE) 0x0014) +#define HID_USAGE_PAGE_BARCODE_SCANNER ((USAGE) 0x008C) +#define HID_USAGE_PAGE_BATTERY_SYSTEM ((USAGE) 0x0085) +#define HID_USAGE_PAGE_BRAILLE_DISPLAY ((USAGE) 0x0041) +#define HID_USAGE_PAGE_BUTTON ((USAGE) 0x0009) +#define HID_USAGE_PAGE_CAMERA_CONTROL ((USAGE) 0x0090) +#define HID_USAGE_PAGE_CONSUMER ((USAGE) 0x000C) +#define HID_USAGE_PAGE_DIGITIZER ((USAGE) 0x000D) +#define HID_USAGE_PAGE_EYE_AND_HEAD_TRACKERS ((USAGE) 0x0012) +#define HID_USAGE_PAGE_FIDO_ALLIANCE ((USAGE) 0xF1D0) +#define HID_USAGE_PAGE_GAME ((USAGE) 0x0005) +#define HID_USAGE_PAGE_GAMING_DEVICE ((USAGE) 0x0092) +#define HID_USAGE_PAGE_GENERIC ((USAGE) 0x0001) +#define HID_USAGE_PAGE_GENERIC_DEVICE ((USAGE) 0x0006) +#define HID_USAGE_PAGE_HAPTICS ((USAGE) 0x000E) +#define HID_USAGE_PAGE_KEYBOARD ((USAGE) 0x0007) +#define HID_USAGE_PAGE_LED ((USAGE) 0x0008) +#define HID_USAGE_PAGE_LIGHTING_ILLUMINATION ((USAGE) 0x0059) +#define HID_USAGE_PAGE_MAGNETIC_STRIPE_READER ((USAGE) 0x008E) +#define HID_USAGE_PAGE_MEDICAL_INSTRUMENT ((USAGE) 0x0040) +#define HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE ((USAGE) 0xFFF3) +#define HID_USAGE_PAGE_MONITOR ((USAGE) 0x0080) +#define HID_USAGE_PAGE_MONITOR_ENUMERATED ((USAGE) 0x0081) +#define HID_USAGE_PAGE_ORDINAL ((USAGE) 0x000A) +#define HID_USAGE_PAGE_PID ((USAGE) 0x000F) +#define HID_USAGE_PAGE_POWER ((USAGE) 0x0084) +#define HID_USAGE_PAGE_WEIGHING_DEVICE ((USAGE) 0x008D) +#define HID_USAGE_PAGE_SENSOR ((USAGE) 0x0020) +#define HID_USAGE_PAGE_SIMULATION ((USAGE) 0x0002) +#define HID_USAGE_PAGE_SOC ((USAGE) 0x0011) +#define HID_USAGE_PAGE_SPORT ((USAGE) 0x0004) +#define HID_USAGE_PAGE_TELEPHONY ((USAGE) 0x000B) +#define HID_USAGE_PAGE_UNICODE ((USAGE) 0x0010) +#define HID_USAGE_PAGE_VESA_VIRTUAL_CONTROLS ((USAGE) 0x0082) +#define HID_USAGE_PAGE_VR ((USAGE) 0x0003) + +#define HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN ((USAGE) 0xFF00) +#define HID_USAGE_PAGE_VENDOR_DEFINED_END ((USAGE) 0xFFFF) + +// UsageId of 0 is undefined for every UsagePage +#define HID_USAGE_UNDEFINED ((USAGE) 0x0000) + +// +// Arcade Page (0x91) +// +#define HID_USAGE_ARCADE_GENERAL_PURPOSE_IO_CARD ((USAGE) 0x0001) +#define HID_USAGE_ARCADE_COIN_DOOR ((USAGE) 0x0002) +#define HID_USAGE_ARCADE_WATCHDOG_TIMER ((USAGE) 0x0003) +#define HID_USAGE_ARCADE_GENERAL_PURPOSE_ANALOG_INPUT_STATE ((USAGE) 0x0030) +#define HID_USAGE_ARCADE_GENERAL_PURPOSE_DIGITAL_INPUT_STATE ((USAGE) 0x0031) +#define HID_USAGE_ARCADE_GENERAL_PURPOSE_OPTICAL_INPUT_STATE ((USAGE) 0x0032) +#define HID_USAGE_ARCADE_GENERAL_PURPOSE_DIGITAL_OUTPUT_STATE ((USAGE) 0x0033) +#define HID_USAGE_ARCADE_NUMBER_OF_COIN_DOORS ((USAGE) 0x0034) +#define HID_USAGE_ARCADE_COIN_DRAWER_DROP_COUNT ((USAGE) 0x0035) +#define HID_USAGE_ARCADE_COIN_DRAWER_START ((USAGE) 0x0036) +#define HID_USAGE_ARCADE_COIN_DRAWER_SERVICE ((USAGE) 0x0037) +#define HID_USAGE_ARCADE_COIN_DRAWER_TILT ((USAGE) 0x0038) +#define HID_USAGE_ARCADE_COIN_DOOR_TEST ((USAGE) 0x0039) +#define HID_USAGE_ARCADE_COIN_DOOR_LOCKOUT ((USAGE) 0x0040) +#define HID_USAGE_ARCADE_WATCHDOG_TIMEOUT ((USAGE) 0x0041) +#define HID_USAGE_ARCADE_WATCHDOG_ACTION ((USAGE) 0x0042) +#define HID_USAGE_ARCADE_WATCHDOG_REBOOT ((USAGE) 0x0043) +#define HID_USAGE_ARCADE_WATCHDOG_RESTART ((USAGE) 0x0044) +#define HID_USAGE_ARCADE_ALARM_INPUT ((USAGE) 0x0045) +#define HID_USAGE_ARCADE_COIN_DOOR_COUNTER ((USAGE) 0x0046) +#define HID_USAGE_ARCADE_IO_DIRECTION_MAPPING ((USAGE) 0x0047) +#define HID_USAGE_ARCADE_SET_IO_DIRECTION_MAPPING ((USAGE) 0x0048) +#define HID_USAGE_ARCADE_EXTENDED_OPTICAL_INPUT_STATE ((USAGE) 0x0049) +#define HID_USAGE_ARCADE_PIN_PAD_INPUT_STATE ((USAGE) 0x004A) +#define HID_USAGE_ARCADE_PIN_PAD_STATUS ((USAGE) 0x004B) +#define HID_USAGE_ARCADE_PIN_PAD_OUTPUT ((USAGE) 0x004C) +#define HID_USAGE_ARCADE_PIN_PAD_COMMAND ((USAGE) 0x004D) + +// +// Alphanumeric/Auxiliary Display Page (0x14) +// +#define HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY ((USAGE) 0x0001) +#define HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY ((USAGE) 0x0002) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_ATTRIBUTES_REPORT ((USAGE) 0x0020) +#define HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET ((USAGE) 0x0021) +#define HID_USAGE_ALPHANUMERIC_DATA_READ_BACK ((USAGE) 0x0022) +#define HID_USAGE_ALPHANUMERIC_FONT_READ_BACK ((USAGE) 0x0023) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT ((USAGE) 0x0024) +#define HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY ((USAGE) 0x0025) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE ((USAGE) 0x0026) +#define HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY ((USAGE) 0x0027) +#define HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE ((USAGE) 0x0028) +#define HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL ((USAGE) 0x0029) +#define HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL ((USAGE) 0x002A) +#define HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT ((USAGE) 0x002B) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_DATA ((USAGE) 0x002C) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS ((USAGE) 0x002D) +#define HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY ((USAGE) 0x002E) +#define HID_USAGE_ALPHANUMERIC_STATUS_READY ((USAGE) 0x002F) +#define HID_USAGE_ALPHANUMERIC_ERR_NOT_A_LOADABLE_CHARACTER ((USAGE) 0x0030) +#define HID_USAGE_ALPHANUMERIC_ERR_FONT_DATA_CANNOT_BE_READ ((USAGE) 0x0031) +#define HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT ((USAGE) 0x0032) +#define HID_USAGE_ALPHANUMERIC_ROW ((USAGE) 0x0033) +#define HID_USAGE_ALPHANUMERIC_COLUMN ((USAGE) 0x0034) +#define HID_USAGE_ALPHANUMERIC_ROWS ((USAGE) 0x0035) +#define HID_USAGE_ALPHANUMERIC_COLUMNS ((USAGE) 0x0036) +#define HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING ((USAGE) 0x0037) +#define HID_USAGE_ALPHANUMERIC_CURSOR_MODE ((USAGE) 0x0038) +#define HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE ((USAGE) 0x0039) +#define HID_USAGE_ALPHANUMERIC_CURSOR_BLINK ((USAGE) 0x003A) +#define HID_USAGE_ALPHANUMERIC_FONT_REPORT ((USAGE) 0x003B) +#define HID_USAGE_ALPHANUMERIC_FONT_DATA ((USAGE) 0x003C) +#define HID_USAGE_ALPHANUMERIC_CHAR_WIDTH ((USAGE) 0x003D) +#define HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT ((USAGE) 0x003E) +#define HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL ((USAGE) 0x003F) +#define HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL ((USAGE) 0x0040) +#define HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET ((USAGE) 0x0041) +#define HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT ((USAGE) 0x0042) +#define HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP ((USAGE) 0x0043) +#define HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT ((USAGE) 0x0044) +#define HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP ((USAGE) 0x0045) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS ((USAGE) 0x0046) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST ((USAGE) 0x0047) +#define HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE ((USAGE) 0x0048) +#define HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK ((USAGE) 0x0049) +#define HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA ((USAGE) 0x004A) +#define HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE ((USAGE) 0x004B) +#define HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE ((USAGE) 0x004C) +#define HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK ((USAGE) 0x004D) +#define HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X ((USAGE) 0x0080) +#define HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y ((USAGE) 0x0081) +#define HID_USAGE_ALPHANUMERIC_MAX_BLIT_SIZE ((USAGE) 0x0082) +#define HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT ((USAGE) 0x0083) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION ((USAGE) 0x0084) +#define HID_USAGE_ALPHANUMERIC_PALETTE_REPORT ((USAGE) 0x0085) +#define HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE ((USAGE) 0x0086) +#define HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET ((USAGE) 0x0087) +#define HID_USAGE_ALPHANUMERIC_PALETTE_DATA ((USAGE) 0x0088) +#define HID_USAGE_ALPHANUMERIC_BLIT_REPORT ((USAGE) 0x008A) +#define HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 ((USAGE) 0x008B) +#define HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 ((USAGE) 0x008C) +#define HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 ((USAGE) 0x008D) +#define HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 ((USAGE) 0x008E) +#define HID_USAGE_ALPHANUMERIC_BLIT_DATA ((USAGE) 0x008F) +#define HID_USAGE_ALPHANUMERIC_SOFT_BUTTON ((USAGE) 0x0090) +#define HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID ((USAGE) 0x0091) +#define HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE ((USAGE) 0x0092) +#define HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 ((USAGE) 0x0093) +#define HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 ((USAGE) 0x0094) +#define HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT ((USAGE) 0x0095) +#define HID_USAGE_ALPHANUMERIC_SOFT_KEYS ((USAGE) 0x00C2) +#define HID_USAGE_ALPHANUMERIC_DISPLAY_DATA_EXTENSIONS ((USAGE) 0x00CC) +#define HID_USAGE_ALPHANUMERIC_CHARACTER_MAPPING ((USAGE) 0x00CF) +#define HID_USAGE_ALPHANUMERIC_UNICODE_EQUIVALENT ((USAGE) 0x00DD) +#define HID_USAGE_ALPHANUMERIC_CHARACTER_PAGE_MAPPING ((USAGE) 0x00DF) +#define HID_USAGE_ALPHANUMERIC_REQUEST_REPORT ((USAGE) 0x00FF) + +// +// Barcode Scanner Page (0x8C) +// +#define HID_USAGE_BARCODE_SCANNER_BARCODE_BADGE_READER ((USAGE) 0x0001) +#define HID_USAGE_BARCODE_SCANNER_BARCODE_SCANNER ((USAGE) 0x0002) +#define HID_USAGE_BARCODE_SCANNER_DUMB_BAR_CODE_SCANNER ((USAGE) 0x0003) +#define HID_USAGE_BARCODE_SCANNER_CORDLESS_SCANNER_BASE ((USAGE) 0x0004) +#define HID_USAGE_BARCODE_SCANNER_BAR_CODE_SCANNER_CRADLE ((USAGE) 0x0005) +#define HID_USAGE_BARCODE_SCANNER_ATTRIBUTE_REPORT ((USAGE) 0x0010) +#define HID_USAGE_BARCODE_SCANNER_SETTINGS_REPORT ((USAGE) 0x0011) +#define HID_USAGE_BARCODE_SCANNER_SCANNED_DATA_REPORT ((USAGE) 0x0012) +#define HID_USAGE_BARCODE_SCANNER_RAW_SCANNED_DATA_REPORT ((USAGE) 0x0013) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_REPORT ((USAGE) 0x0014) +#define HID_USAGE_BARCODE_SCANNER_STATUS_REPORT ((USAGE) 0x0015) +#define HID_USAGE_BARCODE_SCANNER_UPCEAN_CONTROL_REPORT ((USAGE) 0x0016) +#define HID_USAGE_BARCODE_SCANNER_EAN_23_LABEL_CONTROL_REPORT ((USAGE) 0x0017) +#define HID_USAGE_BARCODE_SCANNER_CODE_39_CONTROL_REPORT ((USAGE) 0x0018) +#define HID_USAGE_BARCODE_SCANNER_INTERLEAVED_2_OF_5_CONTROL_REPORT ((USAGE) 0x0019) +#define HID_USAGE_BARCODE_SCANNER_STANDARD_2_OF_5_CONTROL_REPORT ((USAGE) 0x001A) +#define HID_USAGE_BARCODE_SCANNER_MSI_PLESSEY_CONTROL_REPORT ((USAGE) 0x001B) +#define HID_USAGE_BARCODE_SCANNER_CODABAR_CONTROL_REPORT ((USAGE) 0x001C) +#define HID_USAGE_BARCODE_SCANNER_CODE_128_CONTROL_REPORT ((USAGE) 0x001D) +#define HID_USAGE_BARCODE_SCANNER_MISC_1D_CONTROL_REPORT ((USAGE) 0x001E) +#define HID_USAGE_BARCODE_SCANNER_2D_CONTROL_REPORT ((USAGE) 0x001F) +#define HID_USAGE_BARCODE_SCANNER_AIMINGPOINTER_MODE ((USAGE) 0x0030) +#define HID_USAGE_BARCODE_SCANNER_BAR_CODE_PRESENT_SENSOR ((USAGE) 0x0031) +#define HID_USAGE_BARCODE_SCANNER_CLASS_1A_LASER ((USAGE) 0x0032) +#define HID_USAGE_BARCODE_SCANNER_CLASS_2_LASER ((USAGE) 0x0033) +#define HID_USAGE_BARCODE_SCANNER_HEATER_PRESENT ((USAGE) 0x0034) +#define HID_USAGE_BARCODE_SCANNER_CONTACT_SCANNER ((USAGE) 0x0035) +#define HID_USAGE_BARCODE_SCANNER_ELECTRONIC_ARTICLE_SURVEILLANCE_NOTIFICATION ((USAGE) 0x0036) +#define HID_USAGE_BARCODE_SCANNER_CONSTANT_ELECTRONIC_ARTICLE_SURVEILLANCE ((USAGE) 0x0037) +#define HID_USAGE_BARCODE_SCANNER_ERROR_INDICATION ((USAGE) 0x0038) +#define HID_USAGE_BARCODE_SCANNER_FIXED_BEEPER ((USAGE) 0x0039) +#define HID_USAGE_BARCODE_SCANNER_GOOD_DECODE_INDICATION ((USAGE) 0x003A) +#define HID_USAGE_BARCODE_SCANNER_HANDS_FREE_SCANNING ((USAGE) 0x003B) +#define HID_USAGE_BARCODE_SCANNER_INTRINSICALLY_SAFE ((USAGE) 0x003C) +#define HID_USAGE_BARCODE_SCANNER_KLASSE_EINS_LASER ((USAGE) 0x003D) +#define HID_USAGE_BARCODE_SCANNER_LONG_RANGE_SCANNER ((USAGE) 0x003E) +#define HID_USAGE_BARCODE_SCANNER_MIRROR_SPEED_CONTROL ((USAGE) 0x003F) +#define HID_USAGE_BARCODE_SCANNER_NOT_ON_FILE_INDICATION ((USAGE) 0x0040) +#define HID_USAGE_BARCODE_SCANNER_PROGRAMMABLE_BEEPER ((USAGE) 0x0041) +#define HID_USAGE_BARCODE_SCANNER_TRIGGERLESS ((USAGE) 0x0042) +#define HID_USAGE_BARCODE_SCANNER_WAND ((USAGE) 0x0043) +#define HID_USAGE_BARCODE_SCANNER_WATER_RESISTANT ((USAGE) 0x0044) +#define HID_USAGE_BARCODE_SCANNER_MULTIRANGE_SCANNER ((USAGE) 0x0045) +#define HID_USAGE_BARCODE_SCANNER_PROXIMITY_SENSOR ((USAGE) 0x0046) +#define HID_USAGE_BARCODE_SCANNER_FRAGMENT_DECODING ((USAGE) 0x004D) +#define HID_USAGE_BARCODE_SCANNER_SCANNER_READ_CONFIDENCE ((USAGE) 0x004E) +#define HID_USAGE_BARCODE_SCANNER_DATA_PREFIX ((USAGE) 0x004F) +#define HID_USAGE_BARCODE_SCANNER_PREFIX_AIMI ((USAGE) 0x0050) +#define HID_USAGE_BARCODE_SCANNER_PREFIX_NONE ((USAGE) 0x0051) +#define HID_USAGE_BARCODE_SCANNER_PREFIX_PROPRIETARY ((USAGE) 0x0052) +#define HID_USAGE_BARCODE_SCANNER_ACTIVE_TIME ((USAGE) 0x0055) +#define HID_USAGE_BARCODE_SCANNER_AIMING_LASER_PATTERN ((USAGE) 0x0056) +#define HID_USAGE_BARCODE_SCANNER_BAR_CODE_PRESENT ((USAGE) 0x0057) +#define HID_USAGE_BARCODE_SCANNER_BEEPER_STATE ((USAGE) 0x0058) +#define HID_USAGE_BARCODE_SCANNER_LASER_ON_TIME ((USAGE) 0x0059) +#define HID_USAGE_BARCODE_SCANNER_LASER_STATE ((USAGE) 0x005A) +#define HID_USAGE_BARCODE_SCANNER_LOCKOUT_TIME ((USAGE) 0x005B) +#define HID_USAGE_BARCODE_SCANNER_MOTOR_STATE ((USAGE) 0x005C) +#define HID_USAGE_BARCODE_SCANNER_MOTOR_TIMEOUT ((USAGE) 0x005D) +#define HID_USAGE_BARCODE_SCANNER_POWER_ON_RESET_SCANNER ((USAGE) 0x005E) +#define HID_USAGE_BARCODE_SCANNER_PREVENT_READ_OF_BARCODES ((USAGE) 0x005F) +#define HID_USAGE_BARCODE_SCANNER_INITIATE_BARCODE_READ ((USAGE) 0x0060) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_STATE ((USAGE) 0x0061) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_MODE ((USAGE) 0x0062) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_MODE_BLINKING_LASER_ON ((USAGE) 0x0063) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_MODE_CONTINUOUS_LASER_ON ((USAGE) 0x0064) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_MODE_LASER_ON_WHILE_PULLED ((USAGE) 0x0065) +#define HID_USAGE_BARCODE_SCANNER_TRIGGER_MODE_LASER_STAYS_ON_AFTER_RELEASE ((USAGE) 0x0066) +#define HID_USAGE_BARCODE_SCANNER_COMMIT_PARAMETERS_TO_NVM ((USAGE) 0x006D) +#define HID_USAGE_BARCODE_SCANNER_PARAMETER_SCANNING ((USAGE) 0x006E) +#define HID_USAGE_BARCODE_SCANNER_PARAMETERS_CHANGED ((USAGE) 0x006F) +#define HID_USAGE_BARCODE_SCANNER_SET_PARAMETER_DEFAULT_VALUES ((USAGE) 0x0070) +#define HID_USAGE_BARCODE_SCANNER_SCANNER_IN_CRADLE ((USAGE) 0x0075) +#define HID_USAGE_BARCODE_SCANNER_SCANNER_IN_RANGE ((USAGE) 0x0076) +#define HID_USAGE_BARCODE_SCANNER_AIM_DURATION ((USAGE) 0x007A) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_LAMP_DURATION ((USAGE) 0x007B) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_LAMP_INTENSITY ((USAGE) 0x007C) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_LED ((USAGE) 0x007D) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_TONE_FREQUENCY ((USAGE) 0x007E) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_TONE_LENGTH ((USAGE) 0x007F) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_TONE_VOLUME ((USAGE) 0x0080) +#define HID_USAGE_BARCODE_SCANNER_NO_READ_MESSAGE ((USAGE) 0x0082) +#define HID_USAGE_BARCODE_SCANNER_NOT_ON_FILE_VOLUME ((USAGE) 0x0083) +#define HID_USAGE_BARCODE_SCANNER_POWERUP_BEEP ((USAGE) 0x0084) +#define HID_USAGE_BARCODE_SCANNER_SOUND_ERROR_BEEP ((USAGE) 0x0085) +#define HID_USAGE_BARCODE_SCANNER_SOUND_GOOD_READ_BEEP ((USAGE) 0x0086) +#define HID_USAGE_BARCODE_SCANNER_SOUND_NOT_ON_FILE_BEEP ((USAGE) 0x0087) +#define HID_USAGE_BARCODE_SCANNER_GOOD_READ_WHEN_TO_WRITE ((USAGE) 0x0088) +#define HID_USAGE_BARCODE_SCANNER_GRWTI_AFTER_DECODE ((USAGE) 0x0089) +#define HID_USAGE_BARCODE_SCANNER_GRWTI_BEEPLAMP_AFTER_TRANSMIT ((USAGE) 0x008A) +#define HID_USAGE_BARCODE_SCANNER_GRWTI_NO_BEEPLAMP_USE_AT_ALL ((USAGE) 0x008B) +#define HID_USAGE_BARCODE_SCANNER_BOOKLAND_EAN ((USAGE) 0x0091) +#define HID_USAGE_BARCODE_SCANNER_CONVERT_EAN_8_TO_13_TYPE ((USAGE) 0x0092) +#define HID_USAGE_BARCODE_SCANNER_CONVERT_UPC_A_TO_EAN13 ((USAGE) 0x0093) +#define HID_USAGE_BARCODE_SCANNER_CONVERT_UPCE_TO_A ((USAGE) 0x0094) +#define HID_USAGE_BARCODE_SCANNER_EAN13 ((USAGE) 0x0095) +#define HID_USAGE_BARCODE_SCANNER_EAN8 ((USAGE) 0x0096) +#define HID_USAGE_BARCODE_SCANNER_EAN99_128_MANDATORY ((USAGE) 0x0097) +#define HID_USAGE_BARCODE_SCANNER_EAN99_P5128_OPTIONAL ((USAGE) 0x0098) +#define HID_USAGE_BARCODE_SCANNER_ENABLE_EAN_TWO_LABEL ((USAGE) 0x0099) +#define HID_USAGE_BARCODE_SCANNER_UPCEAN ((USAGE) 0x009A) +#define HID_USAGE_BARCODE_SCANNER_UPCEAN_COUPON_CODE ((USAGE) 0x009B) +#define HID_USAGE_BARCODE_SCANNER_UPCEAN_PERIODICALS ((USAGE) 0x009C) +#define HID_USAGE_BARCODE_SCANNER_UPCA ((USAGE) 0x009D) +#define HID_USAGE_BARCODE_SCANNER_UPCA_WITH_128_MANDATORY ((USAGE) 0x009E) +#define HID_USAGE_BARCODE_SCANNER_UPCA_WITH_128_OPTIONAL ((USAGE) 0x009F) +#define HID_USAGE_BARCODE_SCANNER_UPCA_WITH_P5_OPTIONAL ((USAGE) 0x00A0) +#define HID_USAGE_BARCODE_SCANNER_UPCE ((USAGE) 0x00A1) +#define HID_USAGE_BARCODE_SCANNER_UPCE1 ((USAGE) 0x00A2) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL ((USAGE) 0x00A9) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL_AUTODISCRIMINATE_2 ((USAGE) 0x00AA) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL_ONLY_DECODE_WITH_2 ((USAGE) 0x00AB) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL_IGNORE_2 ((USAGE) 0x00AC) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL_AUTODISCRIMINATE_5 ((USAGE) 0x00AD) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL_ONLY_DECODE_WITH_5 ((USAGE) 0x00AE) +#define HID_USAGE_BARCODE_SCANNER_PERIODICAL_IGNORE_5 ((USAGE) 0x00AF) +#define HID_USAGE_BARCODE_SCANNER_CHECK ((USAGE) 0x00B0) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DISABLE_PRICE ((USAGE) 0x00B1) +#define HID_USAGE_BARCODE_SCANNER_CHECK_ENABLE_4_DIGIT_PRICE ((USAGE) 0x00B2) +#define HID_USAGE_BARCODE_SCANNER_CHECK_ENABLE_5_DIGIT_PRICE ((USAGE) 0x00B3) +#define HID_USAGE_BARCODE_SCANNER_CHECK_ENABLE_EUROPEAN_4_DIGIT_PRICE ((USAGE) 0x00B4) +#define HID_USAGE_BARCODE_SCANNER_CHECK_ENABLE_EUROPEAN_5_DIGIT_PRICE ((USAGE) 0x00B5) +#define HID_USAGE_BARCODE_SCANNER_EAN_TWO_LABEL ((USAGE) 0x00B7) +#define HID_USAGE_BARCODE_SCANNER_EAN_THREE_LABEL ((USAGE) 0x00B8) +#define HID_USAGE_BARCODE_SCANNER_EAN_8_FLAG_DIGIT_1 ((USAGE) 0x00B9) +#define HID_USAGE_BARCODE_SCANNER_EAN_8_FLAG_DIGIT_2 ((USAGE) 0x00BA) +#define HID_USAGE_BARCODE_SCANNER_EAN_8_FLAG_DIGIT_3 ((USAGE) 0x00BB) +#define HID_USAGE_BARCODE_SCANNER_EAN_13_FLAG_DIGIT_1 ((USAGE) 0x00BC) +#define HID_USAGE_BARCODE_SCANNER_EAN_13_FLAG_DIGIT_2 ((USAGE) 0x00BD) +#define HID_USAGE_BARCODE_SCANNER_EAN_13_FLAG_DIGIT_3 ((USAGE) 0x00BE) +#define HID_USAGE_BARCODE_SCANNER_ADD_EAN_23_LABEL_DEFINITION ((USAGE) 0x00BF) +#define HID_USAGE_BARCODE_SCANNER_CLEAR_ALL_EAN_23_LABEL_DEFINITIONS ((USAGE) 0x00C0) +#define HID_USAGE_BARCODE_SCANNER_CODABAR ((USAGE) 0x00C3) +#define HID_USAGE_BARCODE_SCANNER_CODE_128 ((USAGE) 0x00C4) +#define HID_USAGE_BARCODE_SCANNER_CODE_39 ((USAGE) 0x00C7) +#define HID_USAGE_BARCODE_SCANNER_CODE_93 ((USAGE) 0x00C8) +#define HID_USAGE_BARCODE_SCANNER_FULL_ASCII_CONVERSION ((USAGE) 0x00C9) +#define HID_USAGE_BARCODE_SCANNER_INTERLEAVED_2_OF_5 ((USAGE) 0x00CA) +#define HID_USAGE_BARCODE_SCANNER_ITALIAN_PHARMACY_CODE ((USAGE) 0x00CB) +#define HID_USAGE_BARCODE_SCANNER_MSIPLESSEY ((USAGE) 0x00CC) +#define HID_USAGE_BARCODE_SCANNER_STANDARD_2_OF_5_IATA ((USAGE) 0x00CD) +#define HID_USAGE_BARCODE_SCANNER_STANDARD_2_OF_5 ((USAGE) 0x00CE) +#define HID_USAGE_BARCODE_SCANNER_TRANSMIT_STARTSTOP ((USAGE) 0x00D3) +#define HID_USAGE_BARCODE_SCANNER_TRIOPTIC ((USAGE) 0x00D4) +#define HID_USAGE_BARCODE_SCANNER_UCCEAN128 ((USAGE) 0x00D5) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT ((USAGE) 0x00D6) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_DISABLE ((USAGE) 0x00D7) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_ENABLE_INTERLEAVED_2_OF_5_OPCC ((USAGE) 0x00D8) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_ENABLE_INTERLEAVED_2_OF_5_USS ((USAGE) 0x00D9) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_ENABLE_STANDARD_2_OF_5_OPCC ((USAGE) 0x00DA) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_ENABLE_STANDARD_2_OF_5_USS ((USAGE) 0x00DB) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_ENABLE_ONE_MSI_PLESSEY ((USAGE) 0x00DC) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_ENABLE_TWO_MSI_PLESSEY ((USAGE) 0x00DD) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_CODABAR_ENABLE ((USAGE) 0x00DE) +#define HID_USAGE_BARCODE_SCANNER_CHECK_DIGIT_CODE_39_ENABLE ((USAGE) 0x00DF) +#define HID_USAGE_BARCODE_SCANNER_TRANSMIT_CHECK_DIGIT ((USAGE) 0x00F0) +#define HID_USAGE_BARCODE_SCANNER_DISABLE_CHECK_DIGIT_TRANSMIT ((USAGE) 0x00F1) +#define HID_USAGE_BARCODE_SCANNER_ENABLE_CHECK_DIGIT_TRANSMIT ((USAGE) 0x00F2) +#define HID_USAGE_BARCODE_SCANNER_SYMBOLOGY_IDENTIFIER_1 ((USAGE) 0x00FB) +#define HID_USAGE_BARCODE_SCANNER_SYMBOLOGY_IDENTIFIER_2 ((USAGE) 0x00FC) +#define HID_USAGE_BARCODE_SCANNER_SYMBOLOGY_IDENTIFIER_3 ((USAGE) 0x00FD) +#define HID_USAGE_BARCODE_SCANNER_DECODED_DATA ((USAGE) 0x00FE) +#define HID_USAGE_BARCODE_SCANNER_DECODE_DATA_CONTINUED ((USAGE) 0x00FF) +#define HID_USAGE_BARCODE_SCANNER_BAR_SPACE_DATA ((USAGE) 0x0100) +#define HID_USAGE_BARCODE_SCANNER_SCANNER_DATA_ACCURACY ((USAGE) 0x0101) +#define HID_USAGE_BARCODE_SCANNER_RAW_DATA_POLARITY ((USAGE) 0x0102) +#define HID_USAGE_BARCODE_SCANNER_POLARITY_INVERTED_BAR_CODE ((USAGE) 0x0103) +#define HID_USAGE_BARCODE_SCANNER_POLARITY_NORMAL_BAR_CODE ((USAGE) 0x0104) +#define HID_USAGE_BARCODE_SCANNER_MINIMUM_LENGTH_TO_DECODE ((USAGE) 0x0106) +#define HID_USAGE_BARCODE_SCANNER_MAXIMUM_LENGTH_TO_DECODE ((USAGE) 0x0107) +#define HID_USAGE_BARCODE_SCANNER_DISCRETE_LENGTH_TO_DECODE_1 ((USAGE) 0x0108) +#define HID_USAGE_BARCODE_SCANNER_DISCRETE_LENGTH_TO_DECODE_2 ((USAGE) 0x0109) +#define HID_USAGE_BARCODE_SCANNER_DATA_LENGTH_METHOD ((USAGE) 0x010A) +#define HID_USAGE_BARCODE_SCANNER_DL_METHOD_READ_ANY ((USAGE) 0x010B) +#define HID_USAGE_BARCODE_SCANNER_DL_METHOD_CHECK_IN_RANGE ((USAGE) 0x010C) +#define HID_USAGE_BARCODE_SCANNER_DL_METHOD_CHECK_FOR_DISCRETE ((USAGE) 0x010D) +#define HID_USAGE_BARCODE_SCANNER_AZTEC_CODE ((USAGE) 0x0110) +#define HID_USAGE_BARCODE_SCANNER_BC412 ((USAGE) 0x0111) +#define HID_USAGE_BARCODE_SCANNER_CHANNEL_CODE ((USAGE) 0x0112) +#define HID_USAGE_BARCODE_SCANNER_CODE_16 ((USAGE) 0x0113) +#define HID_USAGE_BARCODE_SCANNER_CODE_32 ((USAGE) 0x0114) +#define HID_USAGE_BARCODE_SCANNER_CODE_49 ((USAGE) 0x0115) +#define HID_USAGE_BARCODE_SCANNER_CODE_ONE ((USAGE) 0x0116) +#define HID_USAGE_BARCODE_SCANNER_COLORCODE ((USAGE) 0x0117) +#define HID_USAGE_BARCODE_SCANNER_DATA_MATRIX ((USAGE) 0x0118) +#define HID_USAGE_BARCODE_SCANNER_MAXICODE ((USAGE) 0x0119) +#define HID_USAGE_BARCODE_SCANNER_MICROPDF ((USAGE) 0x011A) +#define HID_USAGE_BARCODE_SCANNER_PDF417 ((USAGE) 0x011B) +#define HID_USAGE_BARCODE_SCANNER_POSICODE ((USAGE) 0x011C) +#define HID_USAGE_BARCODE_SCANNER_QR_CODE ((USAGE) 0x011D) +#define HID_USAGE_BARCODE_SCANNER_SUPERCODE ((USAGE) 0x011E) +#define HID_USAGE_BARCODE_SCANNER_ULTRACODE ((USAGE) 0x011F) +#define HID_USAGE_BARCODE_SCANNER_USD5_SLUG_CODE ((USAGE) 0x0120) +#define HID_USAGE_BARCODE_SCANNER_VERICODE ((USAGE) 0x0121) + +// +// Battery System Page (0x85) +// +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_BATTERY_MODE ((USAGE) 0x0001) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_BATTERY_STATUS ((USAGE) 0x0002) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_ALARM_WARNING ((USAGE) 0x0003) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_CHARGER_MODE ((USAGE) 0x0004) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_CHARGER_STATUS ((USAGE) 0x0005) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_CHARGER_SPEC_INFO ((USAGE) 0x0006) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_SELECTOR_STATE ((USAGE) 0x0007) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_SELECTOR_PRESETS ((USAGE) 0x0008) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_SELECTOR_INFO ((USAGE) 0x0009) +#define HID_USAGE_BATTERY_SYSTEM_OPTIONAL_MFG_FUNCTION_1 ((USAGE) 0x0010) +#define HID_USAGE_BATTERY_SYSTEM_OPTIONAL_MFG_FUNCTION_2 ((USAGE) 0x0011) +#define HID_USAGE_BATTERY_SYSTEM_OPTIONAL_MFG_FUNCTION_3 ((USAGE) 0x0012) +#define HID_USAGE_BATTERY_SYSTEM_OPTIONAL_MFG_FUNCTION_4 ((USAGE) 0x0013) +#define HID_USAGE_BATTERY_SYSTEM_OPTIONAL_MFG_FUNCTION_5 ((USAGE) 0x0014) +#define HID_USAGE_BATTERY_SYSTEM_CONNECTION_TO_SM_BUS ((USAGE) 0x0015) +#define HID_USAGE_BATTERY_SYSTEM_OUTPUT_CONNECTION ((USAGE) 0x0016) +#define HID_USAGE_BATTERY_SYSTEM_CHARGER_CONNECTION ((USAGE) 0x0017) +#define HID_USAGE_BATTERY_SYSTEM_BATTERY_INSERTION ((USAGE) 0x0018) +#define HID_USAGE_BATTERY_SYSTEM_USE_NEXT ((USAGE) 0x0019) +#define HID_USAGE_BATTERY_SYSTEM_OK_TO_USE ((USAGE) 0x001A) +#define HID_USAGE_BATTERY_SYSTEM_BATTERY_SUPPORTED ((USAGE) 0x001B) +#define HID_USAGE_BATTERY_SYSTEM_SELECTOR_REVISION ((USAGE) 0x001C) +#define HID_USAGE_BATTERY_SYSTEM_CHARGING_INDICATOR ((USAGE) 0x001D) +#define HID_USAGE_BATTERY_SYSTEM_MANUFACTURER_ACCESS ((USAGE) 0x0028) +#define HID_USAGE_BATTERY_SYSTEM_REMAINING_CAPACITY_LIMIT ((USAGE) 0x0029) +#define HID_USAGE_BATTERY_SYSTEM_REMAINING_TIME_LIMIT ((USAGE) 0x002A) +#define HID_USAGE_BATTERY_SYSTEM_AT_RATE ((USAGE) 0x002B) +#define HID_USAGE_BATTERY_SYSTEM_CAPACITY_MODE ((USAGE) 0x002C) +#define HID_USAGE_BATTERY_SYSTEM_BROADCAST_TO_CHARGER ((USAGE) 0x002D) +#define HID_USAGE_BATTERY_SYSTEM_PRIMARY_BATTERY ((USAGE) 0x002E) +#define HID_USAGE_BATTERY_SYSTEM_CHARGE_CONTROLLER ((USAGE) 0x002F) +#define HID_USAGE_BATTERY_SYSTEM_TERMINATE_CHARGE ((USAGE) 0x0040) +#define HID_USAGE_BATTERY_SYSTEM_TERMINATE_DISCHARGE ((USAGE) 0x0041) +#define HID_USAGE_BATTERY_SYSTEM_BELOW_REMAINING_CAPACITY_LIMIT ((USAGE) 0x0042) +#define HID_USAGE_BATTERY_SYSTEM_REMAINING_TIME_LIMIT_EXPIRED ((USAGE) 0x0043) +#define HID_USAGE_BATTERY_SYSTEM_CHARGING ((USAGE) 0x0044) +#define HID_USAGE_BATTERY_SYSTEM_DISCHARGING ((USAGE) 0x0045) +#define HID_USAGE_BATTERY_SYSTEM_FULLY_CHARGED ((USAGE) 0x0046) +#define HID_USAGE_BATTERY_SYSTEM_FULLY_DISCHARGED ((USAGE) 0x0047) +#define HID_USAGE_BATTERY_SYSTEM_CONDITIONING_FLAG ((USAGE) 0x0048) +#define HID_USAGE_BATTERY_SYSTEM_AT_RATE_OK ((USAGE) 0x0049) +#define HID_USAGE_BATTERY_SYSTEM_SMART_BATTERY_ERROR_CODE ((USAGE) 0x004A) +#define HID_USAGE_BATTERY_SYSTEM_NEED_REPLACEMENT ((USAGE) 0x004B) +#define HID_USAGE_BATTERY_SYSTEM_AT_RATE_TIME_TO_FULL ((USAGE) 0x0060) +#define HID_USAGE_BATTERY_SYSTEM_AT_RATE_TIME_TO_EMPTY ((USAGE) 0x0061) +#define HID_USAGE_BATTERY_SYSTEM_AVERAGE_CURRENT ((USAGE) 0x0062) +#define HID_USAGE_BATTERY_SYSTEM_MAX_ERROR ((USAGE) 0x0063) +#define HID_USAGE_BATTERY_SYSTEM_RELATIVE_STATE_OF_CHARGE ((USAGE) 0x0064) +#define HID_USAGE_BATTERY_SYSTEM_ABSOLUTE_STATE_OF_CHARGE ((USAGE) 0x0065) +#define HID_USAGE_BATTERY_SYSTEM_REMAINING_CAPACITY ((USAGE) 0x0066) +#define HID_USAGE_BATTERY_SYSTEM_FULL_CHARGE_CAPACITY ((USAGE) 0x0067) +#define HID_USAGE_BATTERY_SYSTEM_RUN_TIME_TO_EMPTY ((USAGE) 0x0068) +#define HID_USAGE_BATTERY_SYSTEM_AVERAGE_TIME_TO_EMPTY ((USAGE) 0x0069) +#define HID_USAGE_BATTERY_SYSTEM_AVERAGE_TIME_TO_FULL ((USAGE) 0x006A) +#define HID_USAGE_BATTERY_SYSTEM_CYCLE_COUNT ((USAGE) 0x006B) +#define HID_USAGE_BATTERY_SYSTEM_BATTERY_PACK_MODEL_LEVEL ((USAGE) 0x0080) +#define HID_USAGE_BATTERY_SYSTEM_INTERNAL_CHARGE_CONTROLLER ((USAGE) 0x0081) +#define HID_USAGE_BATTERY_SYSTEM_PRIMARY_BATTERY_SUPPORT ((USAGE) 0x0082) +#define HID_USAGE_BATTERY_SYSTEM_DESIGN_CAPACITY ((USAGE) 0x0083) +#define HID_USAGE_BATTERY_SYSTEM_SPECIFICATION_INFO ((USAGE) 0x0084) +#define HID_USAGE_BATTERY_SYSTEM_MANUFACTURE_DATE ((USAGE) 0x0085) +#define HID_USAGE_BATTERY_SYSTEM_SERIAL_NUMBER ((USAGE) 0x0086) +#define HID_USAGE_BATTERY_SYSTEM_IMANUFACTURER_NAME ((USAGE) 0x0087) +#define HID_USAGE_BATTERY_SYSTEM_IDEVICE_NAME ((USAGE) 0x0088) +#define HID_USAGE_BATTERY_SYSTEM_IDEVICE_CHEMISTRY ((USAGE) 0x0089) +#define HID_USAGE_BATTERY_SYSTEM_MANUFACTURER_DATA ((USAGE) 0x008A) +#define HID_USAGE_BATTERY_SYSTEM_RECHARGABLE ((USAGE) 0x008B) +#define HID_USAGE_BATTERY_SYSTEM_WARNING_CAPACITY_LIMIT ((USAGE) 0x008C) +#define HID_USAGE_BATTERY_SYSTEM_CAPACITY_GRANULARITY_1 ((USAGE) 0x008D) +#define HID_USAGE_BATTERY_SYSTEM_CAPACITY_GRANULARITY_2 ((USAGE) 0x008E) +#define HID_USAGE_BATTERY_SYSTEM_IOEM_INFORMATION ((USAGE) 0x008F) +#define HID_USAGE_BATTERY_SYSTEM_INHIBIT_CHARGE ((USAGE) 0x00C0) +#define HID_USAGE_BATTERY_SYSTEM_ENABLE_POLLING ((USAGE) 0x00C1) +#define HID_USAGE_BATTERY_SYSTEM_RESET_TO_ZERO ((USAGE) 0x00C2) +#define HID_USAGE_BATTERY_SYSTEM_AC_PRESENT ((USAGE) 0x00D0) +#define HID_USAGE_BATTERY_SYSTEM_BATTERY_PRESENT ((USAGE) 0x00D1) +#define HID_USAGE_BATTERY_SYSTEM_POWER_FAIL ((USAGE) 0x00D2) +#define HID_USAGE_BATTERY_SYSTEM_ALARM_INHIBITED ((USAGE) 0x00D3) +#define HID_USAGE_BATTERY_SYSTEM_THERMISTOR_UNDER_RANGE ((USAGE) 0x00D4) +#define HID_USAGE_BATTERY_SYSTEM_THERMISTOR_HOT ((USAGE) 0x00D5) +#define HID_USAGE_BATTERY_SYSTEM_THERMISTOR_COLD ((USAGE) 0x00D6) +#define HID_USAGE_BATTERY_SYSTEM_THERMISTOR_OVER_RANGE ((USAGE) 0x00D7) +#define HID_USAGE_BATTERY_SYSTEM_VOLTAGE_OUT_OF_RANGE ((USAGE) 0x00D8) +#define HID_USAGE_BATTERY_SYSTEM_CURRENT_OUT_OF_RANGE ((USAGE) 0x00D9) +#define HID_USAGE_BATTERY_SYSTEM_CURRENT_NOT_REGULATED ((USAGE) 0x00DA) +#define HID_USAGE_BATTERY_SYSTEM_VOLTAGE_NOT_REGULATED ((USAGE) 0x00DB) +#define HID_USAGE_BATTERY_SYSTEM_MASTER_MODE ((USAGE) 0x00DC) +#define HID_USAGE_BATTERY_SYSTEM_CHARGER_SELECTOR_SUPPORT ((USAGE) 0x00F0) +#define HID_USAGE_BATTERY_SYSTEM_CHARGER_SPEC ((USAGE) 0x00F1) +#define HID_USAGE_BATTERY_SYSTEM_LEVEL_2 ((USAGE) 0x00F2) +#define HID_USAGE_BATTERY_SYSTEM_LEVEL_3 ((USAGE) 0x00F3) + +// +// Braille Display Page (0x41) +// +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_DISPLAY ((USAGE) 0x0001) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_ROW ((USAGE) 0x0002) +#define HID_USAGE_BRAILLE_DISPLAY_8_DOT_BRAILLE_CELL ((USAGE) 0x0003) +#define HID_USAGE_BRAILLE_DISPLAY_6_DOT_BRAILLE_CELL ((USAGE) 0x0004) +#define HID_USAGE_BRAILLE_DISPLAY_NUMBER_OF_BRAILLE_CELLS ((USAGE) 0x0005) +#define HID_USAGE_BRAILLE_DISPLAY_SCREEN_READER_CONTROL ((USAGE) 0x0006) +#define HID_USAGE_BRAILLE_DISPLAY_SCREEN_READER_IDENTIFIER ((USAGE) 0x0007) +#define HID_USAGE_BRAILLE_DISPLAY_ROUTER_SET_1 ((USAGE) 0x00FA) +#define HID_USAGE_BRAILLE_DISPLAY_ROUTER_SET_2 ((USAGE) 0x00FB) +#define HID_USAGE_BRAILLE_DISPLAY_ROUTER_SET_3 ((USAGE) 0x00FC) +#define HID_USAGE_BRAILLE_DISPLAY_ROUTER_KEY ((USAGE) 0x0100) +#define HID_USAGE_BRAILLE_DISPLAY_ROW_ROUTER_KEY ((USAGE) 0x0101) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_BUTTONS ((USAGE) 0x0200) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_1 ((USAGE) 0x0201) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_2 ((USAGE) 0x0202) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_3 ((USAGE) 0x0203) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_4 ((USAGE) 0x0204) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_5 ((USAGE) 0x0205) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_6 ((USAGE) 0x0206) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_7 ((USAGE) 0x0207) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_DOT_8 ((USAGE) 0x0208) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_SPACE ((USAGE) 0x0209) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_LEFT_SPACE ((USAGE) 0x020A) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_KEYBOARD_RIGHT_SPACE ((USAGE) 0x020B) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_FACE_CONTROLS ((USAGE) 0x020C) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_LEFT_CONTROLS ((USAGE) 0x020D) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_RIGHT_CONTROLS ((USAGE) 0x020E) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_TOP_CONTROLS ((USAGE) 0x020F) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_JOYSTICK_CENTER ((USAGE) 0x0210) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_JOYSTICK_UP ((USAGE) 0x0211) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_JOYSTICK_DOWN ((USAGE) 0x0212) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_JOYSTICK_LEFT ((USAGE) 0x0213) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_JOYSTICK_RIGHT ((USAGE) 0x0214) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_DPAD_CENTER ((USAGE) 0x0215) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_DPAD_UP ((USAGE) 0x0216) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_DPAD_DOWN ((USAGE) 0x0217) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_DPAD_LEFT ((USAGE) 0x0218) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_DPAD_RIGHT ((USAGE) 0x0219) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_PAN_LEFT ((USAGE) 0x021A) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_PAN_RIGHT ((USAGE) 0x021B) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_ROCKER_UP ((USAGE) 0x021C) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_ROCKER_DOWN ((USAGE) 0x021D) +#define HID_USAGE_BRAILLE_DISPLAY_BRAILLE_ROCKER_PRESS ((USAGE) 0x021E) + +// +// Button Page (0x09) +// +// There is no need to label these Usages. +// As a convenience for strongly-typed scenarios, below macro is provided. +// +#define HID_USAGE_BUTTON_ID(id) ((USAGE) id) + +// +// Camera Control Page (0x90) +// +#define HID_USAGE_CAMERA_AUTO_FOCUS ((USAGE) 0x0020) +#define HID_USAGE_CAMERA_SHUTTER ((USAGE) 0x0021) + +// +// Consumer Page (0x0C) +// +#define HID_USAGE_CONSUMERCTRL ((USAGE) 0x0001) +#define HID_USAGE_CONSUMER_NUMERIC_KEY_PAD ((USAGE) 0x0002) +#define HID_USAGE_CONSUMER_PROGRAMMABLE_BUTTONS ((USAGE) 0x0003) +#define HID_USAGE_CONSUMER_MICROPHONE ((USAGE) 0x0004) +#define HID_USAGE_CONSUMER_HEADPHONE ((USAGE) 0x0005) +#define HID_USAGE_CONSUMER_GRAPHIC_EQUALIZER ((USAGE) 0x0006) +#define HID_USAGE_CONSUMER_10 ((USAGE) 0x0020) +#define HID_USAGE_CONSUMER_100 ((USAGE) 0x0021) +#define HID_USAGE_CONSUMER_AMPM ((USAGE) 0x0022) +#define HID_USAGE_CONSUMER_POWER ((USAGE) 0x0030) +#define HID_USAGE_CONSUMER_RESET ((USAGE) 0x0031) +#define HID_USAGE_CONSUMER_SLEEP ((USAGE) 0x0032) +#define HID_USAGE_CONSUMER_SLEEP_AFTER ((USAGE) 0x0033) +#define HID_USAGE_CONSUMER_SLEEP_MODE ((USAGE) 0x0034) +#define HID_USAGE_CONSUMER_ILLUMINATION ((USAGE) 0x0035) +#define HID_USAGE_CONSUMER_FUNCTION_BUTTONS ((USAGE) 0x0036) +#define HID_USAGE_CONSUMER_MENU ((USAGE) 0x0040) +#define HID_USAGE_CONSUMER_MENU_PICK ((USAGE) 0x0041) +#define HID_USAGE_CONSUMER_MENU_UP ((USAGE) 0x0042) +#define HID_USAGE_CONSUMER_MENU_DOWN ((USAGE) 0x0043) +#define HID_USAGE_CONSUMER_MENU_LEFT ((USAGE) 0x0044) +#define HID_USAGE_CONSUMER_MENU_RIGHT ((USAGE) 0x0045) +#define HID_USAGE_CONSUMER_MENU_ESCAPE ((USAGE) 0x0046) +#define HID_USAGE_CONSUMER_MENU_VALUE_INCREASE ((USAGE) 0x0047) +#define HID_USAGE_CONSUMER_MENU_VALUE_DECREASE ((USAGE) 0x0048) +#define HID_USAGE_CONSUMER_DATA_ON_SCREEN ((USAGE) 0x0060) +#define HID_USAGE_CONSUMER_CLOSED_CAPTION ((USAGE) 0x0061) +#define HID_USAGE_CONSUMER_CLOSED_CAPTION_SELECT ((USAGE) 0x0062) +#define HID_USAGE_CONSUMER_VCRTV ((USAGE) 0x0063) +#define HID_USAGE_CONSUMER_BROADCAST_MODE ((USAGE) 0x0064) +#define HID_USAGE_CONSUMER_SNAPSHOT ((USAGE) 0x0065) +#define HID_USAGE_CONSUMER_STILL ((USAGE) 0x0066) +#define HID_USAGE_CONSUMER_PICTUREINPICTURE_TOGGLE ((USAGE) 0x0067) +#define HID_USAGE_CONSUMER_PICTUREINPICTURE_SWAP ((USAGE) 0x0068) +#define HID_USAGE_CONSUMER_RED_MENU_BUTTON ((USAGE) 0x0069) +#define HID_USAGE_CONSUMER_GREEN_MENU_BUTTON ((USAGE) 0x006A) +#define HID_USAGE_CONSUMER_BLUE_MENU_BUTTON ((USAGE) 0x006B) +#define HID_USAGE_CONSUMER_YELLOW_MENU_BUTTON ((USAGE) 0x006C) +#define HID_USAGE_CONSUMER_ASPECT ((USAGE) 0x006D) +#define HID_USAGE_CONSUMER_3D_MODE_SELECT ((USAGE) 0x006E) +#define HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_INCREMENT ((USAGE) 0x006F) +#define HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_DECREMENT ((USAGE) 0x0070) +#define HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS ((USAGE) 0x0071) +#define HID_USAGE_CONSUMER_DISPLAY_BACKLIGHT_TOGGLE ((USAGE) 0x0072) +#define HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MINIMUM ((USAGE) 0x0073) +#define HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MAXIMUM ((USAGE) 0x0074) +#define HID_USAGE_CONSUMER_DISPLAY_SET_AUTO_BRIGHTNESS ((USAGE) 0x0075) +#define HID_USAGE_CONSUMER_CAMERA_ACCESS_ENABLED ((USAGE) 0x0076) +#define HID_USAGE_CONSUMER_CAMERA_ACCESS_DISABLED ((USAGE) 0x0077) +#define HID_USAGE_CONSUMER_CAMERA_ACCESS_TOGGLE ((USAGE) 0x0078) +#define HID_USAGE_CONSUMER_KEYBOARD_BRIGHTNESS_INCREMENT ((USAGE) 0x0079) +#define HID_USAGE_CONSUMER_KEYBOARD_BRIGHTNESS_DECREMENT ((USAGE) 0x007A) +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_SET_LEVEL ((USAGE) 0x007B) +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_OOC ((USAGE) 0x007C) +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_SET_MINIMUM ((USAGE) 0x007D) +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_SET_MAXIMUM ((USAGE) 0x007E) +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_AUTO ((USAGE) 0x007F) +#define HID_USAGE_CONSUMER_SELECTION ((USAGE) 0x0080) +#define HID_USAGE_CONSUMER_ASSIGN_SELECTION ((USAGE) 0x0081) +#define HID_USAGE_CONSUMER_MODE_STEP ((USAGE) 0x0082) +#define HID_USAGE_CONSUMER_RECALL_LAST ((USAGE) 0x0083) +#define HID_USAGE_CONSUMER_ENTER_CHANNEL ((USAGE) 0x0084) +#define HID_USAGE_CONSUMER_ORDER_MOVIE ((USAGE) 0x0085) +#define HID_USAGE_CONSUMER_CHANNEL ((USAGE) 0x0086) +#define HID_USAGE_CONSUMER_MEDIA_SELECTION ((USAGE) 0x0087) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_COMPUTER ((USAGE) 0x0088) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TV ((USAGE) 0x0089) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_WWW ((USAGE) 0x008A) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_DVD ((USAGE) 0x008B) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TELEPHONE ((USAGE) 0x008C) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_PROGRAM_GUIDE ((USAGE) 0x008D) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_VIDEO_PHONE ((USAGE) 0x008E) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_GAMES ((USAGE) 0x008F) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_MESSAGES ((USAGE) 0x0090) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_CD ((USAGE) 0x0091) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_VCR ((USAGE) 0x0092) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TUNER ((USAGE) 0x0093) +#define HID_USAGE_CONSUMER_QUIT ((USAGE) 0x0094) +#define HID_USAGE_CONSUMER_HELP ((USAGE) 0x0095) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TAPE ((USAGE) 0x0096) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_CABLE ((USAGE) 0x0097) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_SATELLITE ((USAGE) 0x0098) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_SECURITY ((USAGE) 0x0099) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_HOME ((USAGE) 0x009A) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_CALL ((USAGE) 0x009B) +#define HID_USAGE_CONSUMER_CHANNEL_INCREMENT ((USAGE) 0x009C) +#define HID_USAGE_CONSUMER_CHANNEL_DECREMENT ((USAGE) 0x009D) +#define HID_USAGE_CONSUMER_MEDIA_SELECT_SAP ((USAGE) 0x009E) +#define HID_USAGE_CONSUMER_VCR_PLUS ((USAGE) 0x00A0) +#define HID_USAGE_CONSUMER_ONCE ((USAGE) 0x00A1) +#define HID_USAGE_CONSUMER_DAILY ((USAGE) 0x00A2) +#define HID_USAGE_CONSUMER_WEEKLY ((USAGE) 0x00A3) +#define HID_USAGE_CONSUMER_MONTHLY ((USAGE) 0x00A4) +#define HID_USAGE_CONSUMER_PLAY ((USAGE) 0x00B0) +#define HID_USAGE_CONSUMER_PAUSE ((USAGE) 0x00B1) +#define HID_USAGE_CONSUMER_RECORD ((USAGE) 0x00B2) +#define HID_USAGE_CONSUMER_FAST_FORWARD ((USAGE) 0x00B3) +#define HID_USAGE_CONSUMER_REWIND ((USAGE) 0x00B4) +#define HID_USAGE_CONSUMER_SCAN_NEXT_TRACK ((USAGE) 0x00B5) +#define HID_USAGE_CONSUMER_SCAN_PREV_TRACK ((USAGE) 0x00B6) +#define HID_USAGE_CONSUMER_STOP ((USAGE) 0x00B7) +#define HID_USAGE_CONSUMER_EJECT ((USAGE) 0x00B8) +#define HID_USAGE_CONSUMER_RANDOM_PLAY ((USAGE) 0x00B9) +#define HID_USAGE_CONSUMER_SELECT_DISC ((USAGE) 0x00BA) +#define HID_USAGE_CONSUMER_ENTER_DISC ((USAGE) 0x00BB) +#define HID_USAGE_CONSUMER_REPEAT ((USAGE) 0x00BC) +#define HID_USAGE_CONSUMER_TRACKING ((USAGE) 0x00BD) +#define HID_USAGE_CONSUMER_TRACK_NORMAL ((USAGE) 0x00BE) +#define HID_USAGE_CONSUMER_SLOW_TRACKING ((USAGE) 0x00BF) +#define HID_USAGE_CONSUMER_FRAME_FORWARD ((USAGE) 0x00C0) +#define HID_USAGE_CONSUMER_FRAME_BACK ((USAGE) 0x00C1) +#define HID_USAGE_CONSUMER_MARK ((USAGE) 0x00C2) +#define HID_USAGE_CONSUMER_CLEAR_MARK ((USAGE) 0x00C3) +#define HID_USAGE_CONSUMER_REPEAT_FROM_MARK ((USAGE) 0x00C4) +#define HID_USAGE_CONSUMER_RETURN_TO_MARK ((USAGE) 0x00C5) +#define HID_USAGE_CONSUMER_SEARCH_MARK_FORWARD ((USAGE) 0x00C6) +#define HID_USAGE_CONSUMER_SEARCH_MARK_BACKWARDS ((USAGE) 0x00C7) +#define HID_USAGE_CONSUMER_COUNTER_RESET ((USAGE) 0x00C8) +#define HID_USAGE_CONSUMER_SHOW_COUNTER ((USAGE) 0x00C9) +#define HID_USAGE_CONSUMER_TRACKING_INCREMENT ((USAGE) 0x00CA) +#define HID_USAGE_CONSUMER_TRACKING_DECREMENT ((USAGE) 0x00CB) +#define HID_USAGE_CONSUMER_STOPEJECT ((USAGE) 0x00CC) +#define HID_USAGE_CONSUMER_PLAY_PAUSE ((USAGE) 0x00CD) +#define HID_USAGE_CONSUMER_PLAYSKIP ((USAGE) 0x00CE) +#define HID_USAGE_CONSUMER_VOICE_COMMAND ((USAGE) 0x00CF) +#define HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR ((USAGE) 0x00D0) +#define HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD ((USAGE) 0x00D1) +#define HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP ((USAGE) 0x00D2) +#define HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT ((USAGE) 0x00D3) +#define HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR ((USAGE) 0x00D4) +#define HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_MICROPHONE ((USAGE) 0x00D5) +#define HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA ((USAGE) 0x00D6) +#define HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST ((USAGE) 0x00D7) +#define HID_USAGE_CONSUMER_START_OR_STOP_VOICE_DICTATION_SESSION ((USAGE) 0x00D8) +#define HID_USAGE_CONSUMER_INVOKEDISMISS_EMOJI_PICKER ((USAGE) 0x00D9) +#define HID_USAGE_CONSUMER_VOLUME ((USAGE) 0x00E0) +#define HID_USAGE_CONSUMER_BALANCE ((USAGE) 0x00E1) +#define HID_USAGE_CONSUMER_MUTE ((USAGE) 0x00E2) +#define HID_USAGE_CONSUMER_BASS ((USAGE) 0x00E3) +#define HID_USAGE_CONSUMER_TREBLE ((USAGE) 0x00E4) +#define HID_USAGE_CONSUMER_BASS_BOOST ((USAGE) 0x00E5) +#define HID_USAGE_CONSUMER_SURROUND_MODE ((USAGE) 0x00E6) +#define HID_USAGE_CONSUMER_LOUDNESS ((USAGE) 0x00E7) +#define HID_USAGE_CONSUMER_MPX ((USAGE) 0x00E8) +#define HID_USAGE_CONSUMER_VOLUME_INCREMENT ((USAGE) 0x00E9) +#define HID_USAGE_CONSUMER_VOLUME_DECREMENT ((USAGE) 0x00EA) +#define HID_USAGE_CONSUMER_SPEED_SELECT ((USAGE) 0x00F0) +#define HID_USAGE_CONSUMER_PLAYBACK_SPEED ((USAGE) 0x00F1) +#define HID_USAGE_CONSUMER_STANDARD_PLAY ((USAGE) 0x00F2) +#define HID_USAGE_CONSUMER_LONG_PLAY ((USAGE) 0x00F3) +#define HID_USAGE_CONSUMER_EXTENDED_PLAY ((USAGE) 0x00F4) +#define HID_USAGE_CONSUMER_SLOW ((USAGE) 0x00F5) +#define HID_USAGE_CONSUMER_FAN_ENABLE ((USAGE) 0x0100) +#define HID_USAGE_CONSUMER_FAN_SPEED ((USAGE) 0x0101) +#define HID_USAGE_CONSUMER_LIGHT_ENABLE ((USAGE) 0x0102) +#define HID_USAGE_CONSUMER_LIGHT_ILLUMINATION_LEVEL ((USAGE) 0x0103) +#define HID_USAGE_CONSUMER_CLIMATE_CONTROL_ENABLE ((USAGE) 0x0104) +#define HID_USAGE_CONSUMER_ROOM_TEMPERATURE ((USAGE) 0x0105) +#define HID_USAGE_CONSUMER_SECURITY_ENABLE ((USAGE) 0x0106) +#define HID_USAGE_CONSUMER_FIRE_ALARM ((USAGE) 0x0107) +#define HID_USAGE_CONSUMER_POLICE_ALARM ((USAGE) 0x0108) +#define HID_USAGE_CONSUMER_PROXIMITY ((USAGE) 0x0109) +#define HID_USAGE_CONSUMER_MOTION ((USAGE) 0x010A) +#define HID_USAGE_CONSUMER_DURESS_ALARM ((USAGE) 0x010B) +#define HID_USAGE_CONSUMER_HOLDUP_ALARM ((USAGE) 0x010C) +#define HID_USAGE_CONSUMER_MEDICAL_ALARM ((USAGE) 0x010D) +#define HID_USAGE_CONSUMER_BALANCE_RIGHT ((USAGE) 0x0150) +#define HID_USAGE_CONSUMER_BALANCE_LEFT ((USAGE) 0x0151) +#define HID_USAGE_CONSUMER_BASS_INCREMENT ((USAGE) 0x0152) +#define HID_USAGE_CONSUMER_BASS_DECREMENT ((USAGE) 0x0153) +#define HID_USAGE_CONSUMER_TREBLE_INCREMENT ((USAGE) 0x0154) +#define HID_USAGE_CONSUMER_TREBLE_DECREMENT ((USAGE) 0x0155) +#define HID_USAGE_CONSUMER_SPEAKER_SYSTEM ((USAGE) 0x0160) +#define HID_USAGE_CONSUMER_CHANNEL_LEFT ((USAGE) 0x0161) +#define HID_USAGE_CONSUMER_CHANNEL_RIGHT ((USAGE) 0x0162) +#define HID_USAGE_CONSUMER_CHANNEL_CENTER ((USAGE) 0x0163) +#define HID_USAGE_CONSUMER_CHANNEL_FRONT ((USAGE) 0x0164) +#define HID_USAGE_CONSUMER_CHANNEL_CENTER_FRONT ((USAGE) 0x0165) +#define HID_USAGE_CONSUMER_CHANNEL_SIDE ((USAGE) 0x0166) +#define HID_USAGE_CONSUMER_CHANNEL_SURROUND ((USAGE) 0x0167) +#define HID_USAGE_CONSUMER_CHANNEL_LOW_FREQUENCY_ENHANCEMENT ((USAGE) 0x0168) +#define HID_USAGE_CONSUMER_CHANNEL_TOP ((USAGE) 0x0169) +#define HID_USAGE_CONSUMER_CHANNEL_UNKNOWN ((USAGE) 0x016A) +#define HID_USAGE_CONSUMER_SUBCHANNEL ((USAGE) 0x0170) +#define HID_USAGE_CONSUMER_SUBCHANNEL_INCREMENT ((USAGE) 0x0171) +#define HID_USAGE_CONSUMER_SUBCHANNEL_DECREMENT ((USAGE) 0x0172) +#define HID_USAGE_CONSUMER_ALTERNATE_AUDIO_INCREMENT ((USAGE) 0x0173) +#define HID_USAGE_CONSUMER_ALTERNATE_AUDIO_DECREMENT ((USAGE) 0x0174) +#define HID_USAGE_CONSUMER_APPLICATION_LAUNCH_BUTTONS ((USAGE) 0x0180) +#define HID_USAGE_CONSUMER_AL_LAUNCH_BUTTON_CONFIGURATION_TOOL ((USAGE) 0x0181) +#define HID_USAGE_CONSUMER_AL_PROGRAMMABLE_BUTTON_CONFIGURATION ((USAGE) 0x0182) +#define HID_USAGE_CONSUMER_AL_CONFIGURATION ((USAGE) 0x0183) +#define HID_USAGE_CONSUMER_AL_WORD_PROCESSOR ((USAGE) 0x0184) +#define HID_USAGE_CONSUMER_AL_TEXT_EDITOR ((USAGE) 0x0185) +#define HID_USAGE_CONSUMER_AL_SPREADSHEET ((USAGE) 0x0186) +#define HID_USAGE_CONSUMER_AL_GRAPHICS_EDITOR ((USAGE) 0x0187) +#define HID_USAGE_CONSUMER_AL_PRESENTATION_APP ((USAGE) 0x0188) +#define HID_USAGE_CONSUMER_AL_DATABASE_APP ((USAGE) 0x0189) +#define HID_USAGE_CONSUMER_AL_EMAIL ((USAGE) 0x018A) +#define HID_USAGE_CONSUMER_AL_NEWSREADER ((USAGE) 0x018B) +#define HID_USAGE_CONSUMER_AL_VOICEMAIL ((USAGE) 0x018C) +#define HID_USAGE_CONSUMER_AL_CONTACTSADDRESS_BOOK ((USAGE) 0x018D) +#define HID_USAGE_CONSUMER_AL_CALENDARSCHEDULE ((USAGE) 0x018E) +#define HID_USAGE_CONSUMER_AL_TASKPROJECT_MANAGER ((USAGE) 0x018F) +#define HID_USAGE_CONSUMER_AL_LOGJOURNALTIMECARD ((USAGE) 0x0190) +#define HID_USAGE_CONSUMER_AL_CHECKBOOKFINANCE ((USAGE) 0x0191) +#define HID_USAGE_CONSUMER_AL_CALCULATOR ((USAGE) 0x0192) +#define HID_USAGE_CONSUMER_AL_AV_CAPTUREPLAYBACK ((USAGE) 0x0193) +#define HID_USAGE_CONSUMER_AL_BROWSER ((USAGE) 0x0194) +#define HID_USAGE_CONSUMER_AL_LANWAN_BROWSER ((USAGE) 0x0195) +#define HID_USAGE_CONSUMER_AL_INTERNET_BROWSER ((USAGE) 0x0196) +#define HID_USAGE_CONSUMER_AL_REMOTE_NETWORKINGISP_CONNECT ((USAGE) 0x0197) +#define HID_USAGE_CONSUMER_AL_NETWORK_CONFERENCE ((USAGE) 0x0198) +#define HID_USAGE_CONSUMER_AL_NETWORK_CHAT ((USAGE) 0x0199) +#define HID_USAGE_CONSUMER_AL_TELEPHONYDIALER ((USAGE) 0x019A) +#define HID_USAGE_CONSUMER_AL_LOGON ((USAGE) 0x019B) +#define HID_USAGE_CONSUMER_AL_LOGOFF ((USAGE) 0x019C) +#define HID_USAGE_CONSUMER_AL_LOGONLOGOFF ((USAGE) 0x019D) +#define HID_USAGE_CONSUMER_AL_TERMINAL_LOCKSCREENSAVER ((USAGE) 0x019E) +#define HID_USAGE_CONSUMER_AL_CONTROL_PANEL ((USAGE) 0x019F) +#define HID_USAGE_CONSUMER_AL_COMMAND_LINE_PROCESSORRUN ((USAGE) 0x01A0) +#define HID_USAGE_CONSUMER_AL_PROCESSTASK_MANAGER ((USAGE) 0x01A1) +#define HID_USAGE_CONSUMER_AL_SELECT_TASKAPPLICATION ((USAGE) 0x01A2) +#define HID_USAGE_CONSUMER_AL_NEXT_TASKAPPLICATION ((USAGE) 0x01A3) +#define HID_USAGE_CONSUMER_AL_PREVIOUS_TASKAPPLICATION ((USAGE) 0x01A4) +#define HID_USAGE_CONSUMER_AL_PREEMPTIVE_HALT_TASKAPPLICATION ((USAGE) 0x01A5) +#define HID_USAGE_CONSUMER_AL_INTEGRATED_HELP_CENTER ((USAGE) 0x01A6) +#define HID_USAGE_CONSUMER_AL_DOCUMENTS ((USAGE) 0x01A7) +#define HID_USAGE_CONSUMER_AL_THESAURUS ((USAGE) 0x01A8) +#define HID_USAGE_CONSUMER_AL_DICTIONARY ((USAGE) 0x01A9) +#define HID_USAGE_CONSUMER_AL_DESKTOP ((USAGE) 0x01AA) +#define HID_USAGE_CONSUMER_AL_SPELL_CHECK ((USAGE) 0x01AB) +#define HID_USAGE_CONSUMER_AL_GRAMMAR_CHECK ((USAGE) 0x01AC) +#define HID_USAGE_CONSUMER_AL_WIRELESS_STATUS ((USAGE) 0x01AD) +#define HID_USAGE_CONSUMER_AL_KEYBOARD_LAYOUT ((USAGE) 0x01AE) +#define HID_USAGE_CONSUMER_AL_VIRUS_PROTECTION ((USAGE) 0x01AF) +#define HID_USAGE_CONSUMER_AL_ENCRYPTION ((USAGE) 0x01B0) +#define HID_USAGE_CONSUMER_AL_SCREEN_SAVER ((USAGE) 0x01B1) +#define HID_USAGE_CONSUMER_AL_ALARMS ((USAGE) 0x01B2) +#define HID_USAGE_CONSUMER_AL_CLOCK ((USAGE) 0x01B3) +#define HID_USAGE_CONSUMER_AL_FILE_BROWSER ((USAGE) 0x01B4) +#define HID_USAGE_CONSUMER_AL_POWER_STATUS ((USAGE) 0x01B5) +#define HID_USAGE_CONSUMER_AL_IMAGE_BROWSER ((USAGE) 0x01B6) +#define HID_USAGE_CONSUMER_AL_AUDIO_BROWSER ((USAGE) 0x01B7) +#define HID_USAGE_CONSUMER_AL_MOVIE_BROWSER ((USAGE) 0x01B8) +#define HID_USAGE_CONSUMER_AL_DIGITAL_RIGHTS_MANAGER ((USAGE) 0x01B9) +#define HID_USAGE_CONSUMER_AL_DIGITAL_WALLET ((USAGE) 0x01BA) +#define HID_USAGE_CONSUMER_AL_INSTANT_MESSAGING ((USAGE) 0x01BC) +#define HID_USAGE_CONSUMER_AL_OEM_FEATURES_TIPSTUTORIAL_BROWSER ((USAGE) 0x01BD) +#define HID_USAGE_CONSUMER_AL_OEM_HELP ((USAGE) 0x01BE) +#define HID_USAGE_CONSUMER_AL_ONLINE_COMMUNITY ((USAGE) 0x01BF) +#define HID_USAGE_CONSUMER_AL_ENTERTAINMENT_CONTENT_BROWSER ((USAGE) 0x01C0) +#define HID_USAGE_CONSUMER_AL_ONLINE_SHOPPING_BROWSER ((USAGE) 0x01C1) +#define HID_USAGE_CONSUMER_AL_SMARTCARD_INFORMATIONHELP ((USAGE) 0x01C2) +#define HID_USAGE_CONSUMER_AL_MARKET_MONITORFINANCE_BROWSER ((USAGE) 0x01C3) +#define HID_USAGE_CONSUMER_AL_CUSTOMIZED_CORPORATE_NEWS_BROWSER ((USAGE) 0x01C4) +#define HID_USAGE_CONSUMER_AL_ONLINE_ACTIVITY_BROWSER ((USAGE) 0x01C5) +#define HID_USAGE_CONSUMER_AL_SEARCH ((USAGE) 0x01C6) +#define HID_USAGE_CONSUMER_AL_AUDIO_PLAYER ((USAGE) 0x01C7) +#define HID_USAGE_CONSUMER_AL_MESSAGE_STATUS ((USAGE) 0x01C8) +#define HID_USAGE_CONSUMER_AL_CONTACT_SYNC ((USAGE) 0x01C9) +#define HID_USAGE_CONSUMER_AL_NAVIGATION ((USAGE) 0x01CA) +#define HID_USAGE_CONSUMER_AL_CONTEXTAWARE_DESKTOP_ASSISTANT ((USAGE) 0x01CB) +#define HID_USAGE_CONSUMER_GENERIC_GUI_APPLICATION_CONTROLS ((USAGE) 0x0200) +#define HID_USAGE_CONSUMER_AC_NEW ((USAGE) 0x0201) +#define HID_USAGE_CONSUMER_AC_OPEN ((USAGE) 0x0202) +#define HID_USAGE_CONSUMER_AC_CLOSE ((USAGE) 0x0203) +#define HID_USAGE_CONSUMER_AC_EXIT ((USAGE) 0x0204) +#define HID_USAGE_CONSUMER_AC_MAXIMIZE ((USAGE) 0x0205) +#define HID_USAGE_CONSUMER_AC_MINIMIZE ((USAGE) 0x0206) +#define HID_USAGE_CONSUMER_AC_SAVE ((USAGE) 0x0207) +#define HID_USAGE_CONSUMER_AC_PRINT ((USAGE) 0x0208) +#define HID_USAGE_CONSUMER_AC_PROPERTIES ((USAGE) 0x0209) +#define HID_USAGE_CONSUMER_AC_UNDO ((USAGE) 0x021A) +#define HID_USAGE_CONSUMER_AC_COPY ((USAGE) 0x021B) +#define HID_USAGE_CONSUMER_AC_CUT ((USAGE) 0x021C) +#define HID_USAGE_CONSUMER_AC_PASTE ((USAGE) 0x021D) +#define HID_USAGE_CONSUMER_AC_SELECT_ALL ((USAGE) 0x021E) +#define HID_USAGE_CONSUMER_AC_FIND ((USAGE) 0x021F) +#define HID_USAGE_CONSUMER_AC_FIND_AND_REPLACE ((USAGE) 0x0220) +#define HID_USAGE_CONSUMER_AC_SEARCH ((USAGE) 0x0221) +#define HID_USAGE_CONSUMER_AC_GOTO ((USAGE) 0x0222) +#define HID_USAGE_CONSUMER_AC_HOME ((USAGE) 0x0223) +#define HID_USAGE_CONSUMER_AC_BACK ((USAGE) 0x0224) +#define HID_USAGE_CONSUMER_AC_FORWARD ((USAGE) 0x0225) +#define HID_USAGE_CONSUMER_AC_STOP ((USAGE) 0x0226) +#define HID_USAGE_CONSUMER_AC_REFRESH ((USAGE) 0x0227) +#define HID_USAGE_CONSUMER_AC_PREVIOUS ((USAGE) 0x0228) +#define HID_USAGE_CONSUMER_AC_NEXT ((USAGE) 0x0229) +#define HID_USAGE_CONSUMER_AC_BOOKMARKS ((USAGE) 0x022A) +#define HID_USAGE_CONSUMER_AC_HISTORY ((USAGE) 0x022B) +#define HID_USAGE_CONSUMER_AC_SUBSCRIPTIONS ((USAGE) 0x022C) +#define HID_USAGE_CONSUMER_AC_ZOOM_IN ((USAGE) 0x022D) +#define HID_USAGE_CONSUMER_AC_ZOOM_OUT ((USAGE) 0x022E) +#define HID_USAGE_CONSUMER_AC_ZOOM ((USAGE) 0x022F) +#define HID_USAGE_CONSUMER_AC_FULL_SCREEN_VIEW ((USAGE) 0x0230) +#define HID_USAGE_CONSUMER_AC_NORMAL_VIEW ((USAGE) 0x0231) +#define HID_USAGE_CONSUMER_AC_VIEW_TOGGLE ((USAGE) 0x0232) +#define HID_USAGE_CONSUMER_AC_SCROLL_UP ((USAGE) 0x0233) +#define HID_USAGE_CONSUMER_AC_SCROLL_DOWN ((USAGE) 0x0234) +#define HID_USAGE_CONSUMER_AC_SCROLL ((USAGE) 0x0235) +#define HID_USAGE_CONSUMER_AC_PAN_LEFT ((USAGE) 0x0236) +#define HID_USAGE_CONSUMER_AC_PAN_RIGHT ((USAGE) 0x0237) +#define HID_USAGE_CONSUMER_AC_PAN ((USAGE) 0x0238) +#define HID_USAGE_CONSUMER_AC_NEW_WINDOW ((USAGE) 0x0239) +#define HID_USAGE_CONSUMER_AC_TILE_HORIZONTALLY ((USAGE) 0x023A) +#define HID_USAGE_CONSUMER_AC_TILE_VERTICALLY ((USAGE) 0x023B) +#define HID_USAGE_CONSUMER_AC_FORMAT ((USAGE) 0x023C) +#define HID_USAGE_CONSUMER_AC_EDIT ((USAGE) 0x023D) +#define HID_USAGE_CONSUMER_AC_BOLD ((USAGE) 0x023E) +#define HID_USAGE_CONSUMER_AC_ITALICS ((USAGE) 0x023F) +#define HID_USAGE_CONSUMER_AC_UNDERLINE ((USAGE) 0x0240) +#define HID_USAGE_CONSUMER_AC_STRIKETHROUGH ((USAGE) 0x0241) +#define HID_USAGE_CONSUMER_AC_SUBSCRIPT ((USAGE) 0x0242) +#define HID_USAGE_CONSUMER_AC_SUPERSCRIPT ((USAGE) 0x0243) +#define HID_USAGE_CONSUMER_AC_ALL_CAPS ((USAGE) 0x0244) +#define HID_USAGE_CONSUMER_AC_ROTATE ((USAGE) 0x0245) +#define HID_USAGE_CONSUMER_AC_RESIZE ((USAGE) 0x0246) +#define HID_USAGE_CONSUMER_AC_FLIP_HORIZONTAL ((USAGE) 0x0247) +#define HID_USAGE_CONSUMER_AC_FLIP_VERTICAL ((USAGE) 0x0248) +#define HID_USAGE_CONSUMER_AC_MIRROR_HORIZONTAL ((USAGE) 0x0249) +#define HID_USAGE_CONSUMER_AC_MIRROR_VERTICAL ((USAGE) 0x024A) +#define HID_USAGE_CONSUMER_AC_FONT_SELECT ((USAGE) 0x024B) +#define HID_USAGE_CONSUMER_AC_FONT_COLOR ((USAGE) 0x024C) +#define HID_USAGE_CONSUMER_AC_FONT_SIZE ((USAGE) 0x024D) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_LEFT ((USAGE) 0x024E) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_CENTER_H ((USAGE) 0x024F) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_RIGHT ((USAGE) 0x0250) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_BLOCK_H ((USAGE) 0x0251) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_TOP ((USAGE) 0x0252) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_CENTER_V ((USAGE) 0x0253) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_BOTTOM ((USAGE) 0x0254) +#define HID_USAGE_CONSUMER_AC_JUSTIFY_BLOCK_V ((USAGE) 0x0255) +#define HID_USAGE_CONSUMER_AC_INDENT_DECREASE ((USAGE) 0x0256) +#define HID_USAGE_CONSUMER_AC_INDENT_INCREASE ((USAGE) 0x0257) +#define HID_USAGE_CONSUMER_AC_NUMBERED_LIST ((USAGE) 0x0258) +#define HID_USAGE_CONSUMER_AC_RESTART_NUMBERING ((USAGE) 0x0259) +#define HID_USAGE_CONSUMER_AC_BULLETED_LIST ((USAGE) 0x025A) +#define HID_USAGE_CONSUMER_AC_PROMOTE ((USAGE) 0x025B) +#define HID_USAGE_CONSUMER_AC_DEMOTE ((USAGE) 0x025C) +#define HID_USAGE_CONSUMER_AC_YES ((USAGE) 0x025D) +#define HID_USAGE_CONSUMER_AC_NO ((USAGE) 0x025E) +#define HID_USAGE_CONSUMER_AC_CANCEL ((USAGE) 0x025F) +#define HID_USAGE_CONSUMER_AC_CATALOG ((USAGE) 0x0260) +#define HID_USAGE_CONSUMER_AC_BUYCHECKOUT ((USAGE) 0x0261) +#define HID_USAGE_CONSUMER_AC_ADD_TO_CART ((USAGE) 0x0262) +#define HID_USAGE_CONSUMER_AC_EXPAND ((USAGE) 0x0263) +#define HID_USAGE_CONSUMER_AC_EXPAND_ALL ((USAGE) 0x0264) +#define HID_USAGE_CONSUMER_AC_COLLAPSE ((USAGE) 0x0265) +#define HID_USAGE_CONSUMER_AC_COLLAPSE_ALL ((USAGE) 0x0266) +#define HID_USAGE_CONSUMER_AC_PRINT_PREVIEW ((USAGE) 0x0267) +#define HID_USAGE_CONSUMER_AC_PASTE_SPECIAL ((USAGE) 0x0268) +#define HID_USAGE_CONSUMER_AC_INSERT_MODE ((USAGE) 0x0269) +#define HID_USAGE_CONSUMER_AC_DELETE ((USAGE) 0x026A) +#define HID_USAGE_CONSUMER_AC_LOCK ((USAGE) 0x026B) +#define HID_USAGE_CONSUMER_AC_UNLOCK ((USAGE) 0x026C) +#define HID_USAGE_CONSUMER_AC_PROTECT ((USAGE) 0x026D) +#define HID_USAGE_CONSUMER_AC_UNPROTECT ((USAGE) 0x026E) +#define HID_USAGE_CONSUMER_AC_ATTACH_COMMENT ((USAGE) 0x026F) +#define HID_USAGE_CONSUMER_AC_DELETE_COMMENT ((USAGE) 0x0270) +#define HID_USAGE_CONSUMER_AC_VIEW_COMMENT ((USAGE) 0x0271) +#define HID_USAGE_CONSUMER_AC_SELECT_WORD ((USAGE) 0x0272) +#define HID_USAGE_CONSUMER_AC_SELECT_SENTENCE ((USAGE) 0x0273) +#define HID_USAGE_CONSUMER_AC_SELECT_PARAGRAPH ((USAGE) 0x0274) +#define HID_USAGE_CONSUMER_AC_SELECT_COLUMN ((USAGE) 0x0275) +#define HID_USAGE_CONSUMER_AC_SELECT_ROW ((USAGE) 0x0276) +#define HID_USAGE_CONSUMER_AC_SELECT_TABLE ((USAGE) 0x0277) +#define HID_USAGE_CONSUMER_AC_SELECT_OBJECT ((USAGE) 0x0278) +#define HID_USAGE_CONSUMER_AC_REDOREPEAT ((USAGE) 0x0279) +#define HID_USAGE_CONSUMER_AC_SORT ((USAGE) 0x027A) +#define HID_USAGE_CONSUMER_AC_SORT_ASCENDING ((USAGE) 0x027B) +#define HID_USAGE_CONSUMER_AC_SORT_DESCENDING ((USAGE) 0x027C) +#define HID_USAGE_CONSUMER_AC_FILTER ((USAGE) 0x027D) +#define HID_USAGE_CONSUMER_AC_SET_CLOCK ((USAGE) 0x027E) +#define HID_USAGE_CONSUMER_AC_VIEW_CLOCK ((USAGE) 0x027F) +#define HID_USAGE_CONSUMER_AC_SELECT_TIME_ZONE ((USAGE) 0x0280) +#define HID_USAGE_CONSUMER_AC_EDIT_TIME_ZONES ((USAGE) 0x0281) +#define HID_USAGE_CONSUMER_AC_SET_ALARM ((USAGE) 0x0282) +#define HID_USAGE_CONSUMER_AC_CLEAR_ALARM ((USAGE) 0x0283) +#define HID_USAGE_CONSUMER_AC_SNOOZE_ALARM ((USAGE) 0x0284) +#define HID_USAGE_CONSUMER_AC_RESET_ALARM ((USAGE) 0x0285) +#define HID_USAGE_CONSUMER_AC_SYNCHRONIZE ((USAGE) 0x0286) +#define HID_USAGE_CONSUMER_AC_SENDRECEIVE ((USAGE) 0x0287) +#define HID_USAGE_CONSUMER_AC_SEND_TO ((USAGE) 0x0288) +#define HID_USAGE_CONSUMER_AC_REPLY ((USAGE) 0x0289) +#define HID_USAGE_CONSUMER_AC_REPLY_ALL ((USAGE) 0x028A) +#define HID_USAGE_CONSUMER_AC_FORWARD_MSG ((USAGE) 0x028B) +#define HID_USAGE_CONSUMER_AC_SEND ((USAGE) 0x028C) +#define HID_USAGE_CONSUMER_AC_ATTACH_FILE ((USAGE) 0x028D) +#define HID_USAGE_CONSUMER_AC_UPLOAD ((USAGE) 0x028E) +#define HID_USAGE_CONSUMER_AC_DOWNLOAD_SAVE_TARGET_AS ((USAGE) 0x028F) +#define HID_USAGE_CONSUMER_AC_SET_BORDERS ((USAGE) 0x0290) +#define HID_USAGE_CONSUMER_AC_INSERT_ROW ((USAGE) 0x0291) +#define HID_USAGE_CONSUMER_AC_INSERT_COLUMN ((USAGE) 0x0292) +#define HID_USAGE_CONSUMER_AC_INSERT_FILE ((USAGE) 0x0293) +#define HID_USAGE_CONSUMER_AC_INSERT_PICTURE ((USAGE) 0x0294) +#define HID_USAGE_CONSUMER_AC_INSERT_OBJECT ((USAGE) 0x0295) +#define HID_USAGE_CONSUMER_AC_INSERT_SYMBOL ((USAGE) 0x0296) +#define HID_USAGE_CONSUMER_AC_SAVE_AND_CLOSE ((USAGE) 0x0297) +#define HID_USAGE_CONSUMER_AC_RENAME ((USAGE) 0x0298) +#define HID_USAGE_CONSUMER_AC_MERGE ((USAGE) 0x0299) +#define HID_USAGE_CONSUMER_AC_SPLIT ((USAGE) 0x029A) +#define HID_USAGE_CONSUMER_AC_DISRIBUTE_HORIZONTALLY ((USAGE) 0x029B) +#define HID_USAGE_CONSUMER_AC_DISTRIBUTE_VERTICALLY ((USAGE) 0x029C) +#define HID_USAGE_CONSUMER_AC_NEXT_KEYBOARD_LAYOUT_SELECT ((USAGE) 0x029D) +#define HID_USAGE_CONSUMER_AC_NAVIGATION_GUIDANCE ((USAGE) 0x029E) +#define HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_WINDOWS ((USAGE) 0x029F) +#define HID_USAGE_CONSUMER_AC_SOFT_KEY_LEFT ((USAGE) 0x02A0) +#define HID_USAGE_CONSUMER_AC_SOFT_KEY_RIGHT ((USAGE) 0x02A1) +#define HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_APPLICATIONS ((USAGE) 0x02A2) +#define HID_USAGE_CONSUMER_AC_IDLE_KEEP_ALIVE ((USAGE) 0x02B0) +#define HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION ((USAGE) 0x02C0) +#define HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR ((USAGE) 0x02C1) +#define HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE ((USAGE) 0x02C2) +#define HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT ((USAGE) 0x02C3) +#define HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT ((USAGE) 0x02C4) +#define HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX ((USAGE) 0x02C5) +#define HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS ((USAGE) 0x02C6) +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS ((USAGE) 0x02C7) +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT ((USAGE) 0x02C8) +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP ((USAGE) 0x02C9) +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT_GROUP ((USAGE) 0x02CA) +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_ACCEPT ((USAGE) 0x02CB) +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_CANCEL ((USAGE) 0x02CC) +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_TOGGLE ((USAGE) 0x02D0) +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_DECREMENT ((USAGE) 0x02D1) +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_INCREMENT ((USAGE) 0x02D2) +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_MINIMUM ((USAGE) 0x02D3) +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_MAXIMUM ((USAGE) 0x02D4) +#define HID_USAGE_CONSUMER_CONTACT_EDITED ((USAGE) 0x0500) +#define HID_USAGE_CONSUMER_CONTACT_ADDED ((USAGE) 0x0501) +#define HID_USAGE_CONSUMER_CONTACT_RECORD_ACTIVE ((USAGE) 0x0502) +#define HID_USAGE_CONSUMER_CONTACT_INDEX ((USAGE) 0x0503) +#define HID_USAGE_CONSUMER_CONTACT_NICKNAME ((USAGE) 0x0504) +#define HID_USAGE_CONSUMER_CONTACT_FIRST_NAME ((USAGE) 0x0505) +#define HID_USAGE_CONSUMER_CONTACT_LAST_NAME ((USAGE) 0x0506) +#define HID_USAGE_CONSUMER_CONTACT_FULL_NAME ((USAGE) 0x0507) +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_PERSONAL ((USAGE) 0x0508) +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_BUSINESS ((USAGE) 0x0509) +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_MOBILE ((USAGE) 0x050A) +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_PAGER ((USAGE) 0x050B) +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_FAX ((USAGE) 0x050C) +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_OTHER ((USAGE) 0x050D) +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_PERSONAL ((USAGE) 0x050E) +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_BUSINESS ((USAGE) 0x050F) +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_OTHER ((USAGE) 0x0510) +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_MAIN ((USAGE) 0x0511) +#define HID_USAGE_CONSUMER_CONTACT_SPEED_DIAL_NUMBER ((USAGE) 0x0512) +#define HID_USAGE_CONSUMER_CONTACT_STATUS_FLAG ((USAGE) 0x0513) +#define HID_USAGE_CONSUMER_CONTACT_MISC ((USAGE) 0x0514) + +#define HID_VALUE_CONSUMER_KEYBOARD_FORM_FACTOR_UNKNOWN ((USAGE_VALUE) 0x0000) +#define HID_VALUE_CONSUMER_KEYBOARD_FORM_FACTOR_FULL_SIZE ((USAGE_VALUE) 0x0001) +#define HID_VALUE_CONSUMER_KEYBOARD_FORM_FACTOR_COMPACT ((USAGE_VALUE) 0x0002) + +#define HID_VALUE_CONSUMER_KEYBOARD_KEY_TYPE_UNKNOWN ((USAGE_VALUE) 0x0000) +#define HID_VALUE_CONSUMER_KEYBOARD_KEY_TYPE_FULL_TRAVEL ((USAGE_VALUE) 0x0001) +#define HID_VALUE_CONSUMER_KEYBOARD_KEY_TYPE_LOW_TRAVEL ((USAGE_VALUE) 0x0002) +#define HID_VALUE_CONSUMER_KEYBOARD_KEY_TYPE_ZERO_TRAVEL ((USAGE_VALUE) 0x0003) + +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_UNKNOWN ((USAGE_VALUE) 0x0000) +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_US_101 ((USAGE_VALUE) 0x0001) +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_KOREA_103 ((USAGE_VALUE) 0x0002) +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_EUROPE_102 ((USAGE_VALUE) 0x0003) +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_BRAZIL_104 ((USAGE_VALUE) 0x0004) +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_JAPAN_106 ((USAGE_VALUE) 0x0005) +#define HID_VALUE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT_VENDOR ((USAGE_VALUE) 0x0006) + +// +// Digitizers Page (0x0D) +// +#define HID_USAGE_DIGITIZER_DIGITIZER ((USAGE) 0x0001) +#define HID_USAGE_DIGITIZER_PEN ((USAGE) 0x0002) +#define HID_USAGE_DIGITIZER_LIGHT_PEN ((USAGE) 0x0003) +#define HID_USAGE_DIGITIZER_TOUCH_SCREEN ((USAGE) 0x0004) +#define HID_USAGE_DIGITIZER_TOUCH_PAD ((USAGE) 0x0005) +#define HID_USAGE_DIGITIZER_WHITE_BOARD ((USAGE) 0x0006) +#define HID_USAGE_DIGITIZER_COORD_MEASURING ((USAGE) 0x0007) +#define HID_USAGE_DIGITIZER_3D_DIGITIZER ((USAGE) 0x0008) +#define HID_USAGE_DIGITIZER_STEREO_PLOTTER ((USAGE) 0x0009) +#define HID_USAGE_DIGITIZER_ARTICULATED_ARM ((USAGE) 0x000A) +#define HID_USAGE_DIGITIZER_ARMATURE ((USAGE) 0x000B) +#define HID_USAGE_DIGITIZER_MULTI_POINT ((USAGE) 0x000C) +#define HID_USAGE_DIGITIZER_FREE_SPACE_WAND ((USAGE) 0x000D) +#define HID_USAGE_DIGITIZER_DEVICE_CONFIGURATION ((USAGE) 0x000E) +#define HID_USAGE_DIGITIZER_HEAT_MAP ((USAGE) 0x000F) +#define HID_USAGE_DIGITIZER_STYLUS ((USAGE) 0x0020) +#define HID_USAGE_DIGITIZER_PUCK ((USAGE) 0x0021) +#define HID_USAGE_DIGITIZER_FINGER ((USAGE) 0x0022) +#define HID_USAGE_DIGITIZER_DEVICE_SETTINGS ((USAGE) 0x0023) +#define HID_USAGE_DIGITIZER_CHARACTER_GESTURE ((USAGE) 0x0024) +#define HID_USAGE_DIGITIZER_TIP_PRESSURE ((USAGE) 0x0030) +#define HID_USAGE_DIGITIZER_BARREL_PRESSURE ((USAGE) 0x0031) +#define HID_USAGE_DIGITIZER_IN_RANGE ((USAGE) 0x0032) +#define HID_USAGE_DIGITIZER_TOUCH ((USAGE) 0x0033) +#define HID_USAGE_DIGITIZER_UNTOUCH ((USAGE) 0x0034) +#define HID_USAGE_DIGITIZER_TAP ((USAGE) 0x0035) +#define HID_USAGE_DIGITIZER_QUALITY ((USAGE) 0x0036) +#define HID_USAGE_DIGITIZER_DATA_VALID ((USAGE) 0x0037) +#define HID_USAGE_DIGITIZER_TRANSDUCER_INDEX ((USAGE) 0x0038) +#define HID_USAGE_DIGITIZER_TABLET_FUNC_KEYS ((USAGE) 0x0039) +#define HID_USAGE_DIGITIZER_PROG_CHANGE_KEYS ((USAGE) 0x003A) +#define HID_USAGE_DIGITIZER_BATTERY_STRENGTH ((USAGE) 0x003B) +#define HID_USAGE_DIGITIZER_INVERT ((USAGE) 0x003C) +#define HID_USAGE_DIGITIZER_X_TILT ((USAGE) 0x003D) +#define HID_USAGE_DIGITIZER_Y_TILT ((USAGE) 0x003E) +#define HID_USAGE_DIGITIZER_AZIMUTH ((USAGE) 0x003F) +#define HID_USAGE_DIGITIZER_ALTITUDE ((USAGE) 0x0040) +#define HID_USAGE_DIGITIZER_TWIST ((USAGE) 0x0041) +#define HID_USAGE_DIGITIZER_TIP_SWITCH ((USAGE) 0x0042) +#define HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH ((USAGE) 0x0043) +#define HID_USAGE_DIGITIZER_BARREL_SWITCH ((USAGE) 0x0044) +#define HID_USAGE_DIGITIZER_ERASER ((USAGE) 0x0045) +#define HID_USAGE_DIGITIZER_TABLET_PICK ((USAGE) 0x0046) +#define HID_USAGE_DIGITIZER_TOUCH_VALID ((USAGE) 0x0047) +#define HID_USAGE_DIGITIZER_WIDTH ((USAGE) 0x0048) +#define HID_USAGE_DIGITIZER_HEIGHT ((USAGE) 0x0049) +#define HID_USAGE_DIGITIZER_CONTACT_IDENTIFIER ((USAGE) 0x0051) +#define HID_USAGE_DIGITIZER_DEVICE_MODE ((USAGE) 0x0052) +#define HID_USAGE_DIGITIZER_DEVICE_IDENTIFIER ((USAGE) 0x0053) +#define HID_USAGE_DIGITIZER_CONTACT_COUNT ((USAGE) 0x0054) +#define HID_USAGE_DIGITIZER_CONTACT_COUNT_MAXIMUM ((USAGE) 0x0055) +#define HID_USAGE_DIGITIZER_SCAN_TIME ((USAGE) 0x0056) +#define HID_USAGE_DIGITIZER_SURFACE_SWITCH ((USAGE) 0x0057) +#define HID_USAGE_DIGITIZER_BUTTON_SWITCH ((USAGE) 0x0058) +#define HID_USAGE_DIGITIZER_PAD_TYPE ((USAGE) 0x0059) +#define HID_USAGE_DIGITIZER_SECONDARY_BARREL_SWITCH ((USAGE) 0x005A) +#define HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL ((USAGE) 0x005B) +#define HID_USAGE_DIGITIZER_PREFERRED_COLOR ((USAGE) 0x005C) +#define HID_USAGE_DIGITIZER_PREFERRED_COLOR_IS_LOCKED ((USAGE) 0x005D) +#define HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH ((USAGE) 0x005E) +#define HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH_IS_LOCKED ((USAGE) 0x005F) +#define HID_USAGE_DIGITIZER_LATENCY_MODE ((USAGE) 0x0060) +#define HID_USAGE_DIGITIZER_GESTURE_CHARACTER_QUALITY ((USAGE) 0x0061) +#define HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA_LENGTH ((USAGE) 0x0062) +#define HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA ((USAGE) 0x0063) +#define HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENCODING ((USAGE) 0x0064) +#define HID_USAGE_DIGITIZER_UTF8_CHARACTER_GESTURE_ENCODING ((USAGE) 0x0065) +#define HID_USAGE_DIGITIZER_UTF16_LITTLE_ENDIAN_CHARACTER_GESTURE_ENCODING ((USAGE) 0x0066) +#define HID_USAGE_DIGITIZER_UTF16_BIG_ENDIAN_CHARACTER_GESTURE_ENCODING ((USAGE) 0x0067) +#define HID_USAGE_DIGITIZER_UTF32_LITTLE_ENDIAN_CHARACTER_GESTURE_ENCODING ((USAGE) 0x0068) +#define HID_USAGE_DIGITIZER_UTF32_BIG_ENDIAN_CHARACTER_GESTURE_ENCODING ((USAGE) 0x0069) +#define HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VENDOR_ID ((USAGE) 0x006A) +#define HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VERSION ((USAGE) 0x006B) +#define HID_USAGE_DIGITIZER_HEAT_MAP_FRAME_DATA ((USAGE) 0x006C) +#define HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENABLE ((USAGE) 0x006D) +#define HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_PART2 ((USAGE) 0x006E) +#define HID_USAGE_DIGITIZER_NO_PREFERRED_COLOR ((USAGE) 0x006F) +#define HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE ((USAGE) 0x0070) +#define HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE_IS_LOCKED ((USAGE) 0x0071) +#define HID_USAGE_DIGITIZER_INK ((USAGE) 0x0072) +#define HID_USAGE_DIGITIZER_PENCIL ((USAGE) 0x0073) +#define HID_USAGE_DIGITIZER_HIGHLIGHTER ((USAGE) 0x0074) +#define HID_USAGE_DIGITIZER_CHISEL_MARKER ((USAGE) 0x0075) +#define HID_USAGE_DIGITIZER_BRUSH ((USAGE) 0x0076) +#define HID_USAGE_DIGITIZER_NO_PREFERENCE ((USAGE) 0x0077) +#define HID_USAGE_DIGITIZER_DIGITIZER_DIAGNOSTIC ((USAGE) 0x0080) +#define HID_USAGE_DIGITIZER_DIGITIZER_ERROR ((USAGE) 0x0081) +#define HID_USAGE_DIGITIZER_ERR_NORMAL_STATUS ((USAGE) 0x0082) +#define HID_USAGE_DIGITIZER_ERR_TRANSDUCERS_EXCEEDED ((USAGE) 0x0083) +#define HID_USAGE_DIGITIZER_ERR_FULL_TRANS_FEATURES_UNAVAILABLE ((USAGE) 0x0084) +#define HID_USAGE_DIGITIZER_ERR_CHARGE_LOW ((USAGE) 0x0085) +#define HID_USAGE_DIGITIZER_TRANSDUCER_SOFTWARE_INFO ((USAGE) 0x0090) +#define HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR ((USAGE) 0x0091) +#define HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT ((USAGE) 0x0092) +#define HID_USAGE_DIGITIZER_DEVICE_SUPPORTED_PROTOCOLS ((USAGE) 0x0093) +#define HID_USAGE_DIGITIZER_TRANSDUCER_SUPPORTED_PROTOCOLS ((USAGE) 0x0094) +#define HID_USAGE_DIGITIZER_NO_PROTOCOL ((USAGE) 0x0095) +#define HID_USAGE_DIGITIZER_WACOM_AES_PROTOCOL ((USAGE) 0x0096) +#define HID_USAGE_DIGITIZER_USI_PROTOCOL ((USAGE) 0x0097) +#define HID_USAGE_DIGITIZER_MICROSOFT_PEN_PROTOCOL ((USAGE) 0x0098) +#define HID_USAGE_DIGITIZER_SUPPORTED_REPORT_RATES ((USAGE) 0x00A0) +#define HID_USAGE_DIGITIZER_REPORT_RATE ((USAGE) 0x00A1) +#define HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED ((USAGE) 0x00A2) +#define HID_USAGE_DIGITIZER_SWITCH_DISABLED ((USAGE) 0x00A3) +#define HID_USAGE_DIGITIZER_SWITCH_UNIMPLEMENTED ((USAGE) 0x00A4) +#define HID_USAGE_DIGITIZER_TRANSDUCER_SWITCHES ((USAGE) 0x00A5) +#define HID_USAGE_DIGITIZER_TRANSDUCER_INDEX_SELECTOR ((USAGE) 0x00A6) +#define HID_USAGE_DIGITIZER_BUTTON_PRESS_THRESHOLD ((USAGE) 0x00B0) + +// +// Eye and Head Trackers Page (0x12) +// +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_EYE_TRACKER ((USAGE) 0x0001) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_HEAD_TRACKER ((USAGE) 0x0002) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_TRACKING_DATA ((USAGE) 0x0010) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_CAPABILITIES ((USAGE) 0x0011) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_CONFIGURATION ((USAGE) 0x0012) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_STATUS ((USAGE) 0x0013) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_CONTROL ((USAGE) 0x0014) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_SENSOR_TIMESTAMP ((USAGE) 0x0020) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_POSITION_X ((USAGE) 0x0021) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_POSITION_Y ((USAGE) 0x0022) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_POSITION_Z ((USAGE) 0x0023) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_GAZE_POINT ((USAGE) 0x0024) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_LEFT_EYE_POSITION ((USAGE) 0x0025) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_RIGHT_EYE_POSITION ((USAGE) 0x0026) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_HEAD_POSITION ((USAGE) 0x0027) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_HEAD_DIRECTION_POINT ((USAGE) 0x0028) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_ROTATION_ABOUT_X_AXIS ((USAGE) 0x0029) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_ROTATION_ABOUT_Y_AXIS ((USAGE) 0x002A) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_ROTATION_ABOUT_Z_AXIS ((USAGE) 0x002B) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_TRACKER_QUALITY ((USAGE) 0x0100) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_MINIMUM_TRACKING_DISTANCE ((USAGE) 0x0101) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_OPTIMUM_TRACKING_DISTANCE ((USAGE) 0x0102) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_MAXIMUM_TRACKING_DISTANCE ((USAGE) 0x0103) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_MAXIMUM_SCREEN_PLANE_WIDTH ((USAGE) 0x0104) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_MAXIMUM_SCREEN_PLANE_HEIGHT ((USAGE) 0x0105) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_DISPLAY_MANUFACTURER_ID ((USAGE) 0x0200) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_DISPLAY_PRODUCT_ID ((USAGE) 0x0201) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_DISPLAY_SERIAL_NUMBER ((USAGE) 0x0202) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_DISPLAY_MANUFACTURER_DATE ((USAGE) 0x0203) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_CALIBRATED_SCREEN_WIDTH ((USAGE) 0x0204) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_CALIBRATED_SCREEN_HEIGHT ((USAGE) 0x0205) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_SAMPLING_FREQUENCY ((USAGE) 0x0300) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_CONFIGURATION_STATUS ((USAGE) 0x0301) +#define HID_USAGE_EYE_AND_HEAD_TRACKERS_DEVICE_MODE_REQUEST ((USAGE) 0x0400) + +// +// FIDO Alliance Page (0xF1D0) +// +#define HID_USAGE_FIDO_ALLIANCE_U2F_AUTHENTICATOR_DEVICE ((USAGE) 0x0001) +#define HID_USAGE_FIDO_ALLIANCE_INPUT_REPORT_DATA ((USAGE) 0x0020) +#define HID_USAGE_FIDO_ALLIANCE_OUTPUT_REPORT_DATA ((USAGE) 0x0021) + +// +// Game Controls Page (0x05) +// +#define HID_USAGE_GAME_3D_GAME_CONTROLLER ((USAGE) 0x0001) +#define HID_USAGE_GAME_PINBALL_DEVICE ((USAGE) 0x0002) +#define HID_USAGE_GAME_GUN_DEVICE ((USAGE) 0x0003) +#define HID_USAGE_GAME_POV ((USAGE) 0x0020) +#define HID_USAGE_GAME_TURN_RIGHT_LEFT ((USAGE) 0x0021) +#define HID_USAGE_GAME_PITCH_FORWARD_BACK ((USAGE) 0x0022) +#define HID_USAGE_GAME_ROLL_RIGHT_LEFT ((USAGE) 0x0023) +#define HID_USAGE_GAME_MOVE_RIGHT_LEFT ((USAGE) 0x0024) +#define HID_USAGE_GAME_MOVE_FORWARD_BACK ((USAGE) 0x0025) +#define HID_USAGE_GAME_MOVE_UP_DOWN ((USAGE) 0x0026) +#define HID_USAGE_GAME_LEAN_RIGHT_LEFT ((USAGE) 0x0027) +#define HID_USAGE_GAME_LEAN_FORWARD_BACK ((USAGE) 0x0028) +#define HID_USAGE_GAME_POV_HEIGHT ((USAGE) 0x0029) +#define HID_USAGE_GAME_FLIPPER ((USAGE) 0x002A) +#define HID_USAGE_GAME_SECONDARY_FLIPPER ((USAGE) 0x002B) +#define HID_USAGE_GAME_BUMP ((USAGE) 0x002C) +#define HID_USAGE_GAME_NEW_GAME ((USAGE) 0x002D) +#define HID_USAGE_GAME_SHOOT_BALL ((USAGE) 0x002E) +#define HID_USAGE_GAME_PLAYER ((USAGE) 0x002F) +#define HID_USAGE_GAME_GUN_BOLT ((USAGE) 0x0030) +#define HID_USAGE_GAME_GUN_CLIP ((USAGE) 0x0031) +#define HID_USAGE_GAME_GUN_SELECTOR ((USAGE) 0x0032) +#define HID_USAGE_GAME_GUN_SINGLE_SHOT ((USAGE) 0x0033) +#define HID_USAGE_GAME_GUN_BURST ((USAGE) 0x0034) +#define HID_USAGE_GAME_GUN_AUTOMATIC ((USAGE) 0x0035) +#define HID_USAGE_GAME_GUN_SAFETY ((USAGE) 0x0036) +#define HID_USAGE_GAME_GAMEPAD_FIRE_JUMP ((USAGE) 0x0037) +#define HID_USAGE_GAME_GAMEPAD_TRIGGER ((USAGE) 0x0039) +#define HID_USAGE_GAME_FORMFITTING_GAMEPAD ((USAGE) 0x003A) + +// +// Gaming Device Page (0x92) +// +// There is no need to label these usages. +// + +// +// Generic Desktop Page (0x01) +// +#define HID_USAGE_GENERIC_POINTER ((USAGE) 0x0001) +#define HID_USAGE_GENERIC_MOUSE ((USAGE) 0x0002) +#define HID_USAGE_GENERIC_JOYSTICK ((USAGE) 0x0004) +#define HID_USAGE_GENERIC_GAMEPAD ((USAGE) 0x0005) +#define HID_USAGE_GENERIC_KEYBOARD ((USAGE) 0x0006) +#define HID_USAGE_GENERIC_KEYPAD ((USAGE) 0x0007) +#define HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER ((USAGE) 0x0008) +#define HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL ((USAGE) 0x0009) +#define HID_USAGE_GENERIC_WATER_COOLING_DEVICE ((USAGE) 0x000A) +#define HID_USAGE_GENERIC_COMPUTER_CHASSIS_DEVICE ((USAGE) 0x000B) +#define HID_USAGE_GENERIC_WIRELESS_RADIO_CONTROLS ((USAGE) 0x000C) +#define HID_USAGE_GENERIC_PORTABLE_DEVICE_CONTROL ((USAGE) 0x000D) +#define HID_USAGE_GENERIC_INTERACTIVE_CONTROL ((USAGE) 0x000E) +#define HID_USAGE_GENERIC_SPATIAL_CONTROLLER ((USAGE) 0x000F) +#define HID_USAGE_GENERIC_ASSISTIVE_CONTROL ((USAGE) 0x0010) +#define HID_USAGE_GENERIC_DEVICE_DOCK ((USAGE) 0x0011) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE ((USAGE) 0x0012) +#define HID_USAGE_GENERIC_CALL_STATE_MANAGEMENT_CONTROL ((USAGE) 0x0013) +#define HID_USAGE_GENERIC_X ((USAGE) 0x0030) +#define HID_USAGE_GENERIC_Y ((USAGE) 0x0031) +#define HID_USAGE_GENERIC_Z ((USAGE) 0x0032) +#define HID_USAGE_GENERIC_RX ((USAGE) 0x0033) +#define HID_USAGE_GENERIC_RY ((USAGE) 0x0034) +#define HID_USAGE_GENERIC_RZ ((USAGE) 0x0035) +#define HID_USAGE_GENERIC_SLIDER ((USAGE) 0x0036) +#define HID_USAGE_GENERIC_DIAL ((USAGE) 0x0037) +#define HID_USAGE_GENERIC_WHEEL ((USAGE) 0x0038) +#define HID_USAGE_GENERIC_HATSWITCH ((USAGE) 0x0039) +#define HID_USAGE_GENERIC_COUNTED_BUFFER ((USAGE) 0x003A) +#define HID_USAGE_GENERIC_BYTE_COUNT ((USAGE) 0x003B) +#define HID_USAGE_GENERIC_MOTION_WAKEUP ((USAGE) 0x003C) +#define HID_USAGE_GENERIC_START ((USAGE) 0x003D) +#define HID_USAGE_GENERIC_SELECT ((USAGE) 0x003E) +#define HID_USAGE_GENERIC_VX ((USAGE) 0x0040) +#define HID_USAGE_GENERIC_VY ((USAGE) 0x0041) +#define HID_USAGE_GENERIC_VZ ((USAGE) 0x0042) +#define HID_USAGE_GENERIC_VBRX ((USAGE) 0x0043) +#define HID_USAGE_GENERIC_VBRY ((USAGE) 0x0044) +#define HID_USAGE_GENERIC_VBRZ ((USAGE) 0x0045) +#define HID_USAGE_GENERIC_VNO ((USAGE) 0x0046) +#define HID_USAGE_GENERIC_FEATURE_NOTIFICATION ((USAGE) 0x0047) +#define HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER ((USAGE) 0x0048) +#define HID_USAGE_GENERIC_QX ((USAGE) 0x0049) +#define HID_USAGE_GENERIC_QY ((USAGE) 0x004A) +#define HID_USAGE_GENERIC_QZ ((USAGE) 0x004B) +#define HID_USAGE_GENERIC_QW ((USAGE) 0x004C) +#define HID_USAGE_GENERIC_SYSTEM_CTL ((USAGE) 0x0080) +#define HID_USAGE_GENERIC_SYSCTL_POWER ((USAGE) 0x0081) +#define HID_USAGE_GENERIC_SYSCTL_SLEEP ((USAGE) 0x0082) +#define HID_USAGE_GENERIC_SYSCTL_WAKE ((USAGE) 0x0083) +#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x0084) +#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU ((USAGE) 0x0085) +#define HID_USAGE_GENERIC_SYSCTL_APP_MENU ((USAGE) 0x0086) +#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU ((USAGE) 0x0087) +#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT ((USAGE) 0x0088) +#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT ((USAGE) 0x0089) +#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT ((USAGE) 0x008A) +#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT ((USAGE) 0x008B) +#define HID_USAGE_GENERIC_SYSCTL_MENU_UP ((USAGE) 0x008C) +#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN ((USAGE) 0x008D) +#define HID_USAGE_GENERIC_SYSCTL_COLD_RESTART ((USAGE) 0x008E) +#define HID_USAGE_GENERIC_SYSCTL_WARM_RESTART ((USAGE) 0x008F) +#define HID_USAGE_GENERIC_DPAD_UP ((USAGE) 0x0090) +#define HID_USAGE_GENERIC_DPAD_DOWN ((USAGE) 0x0091) +#define HID_USAGE_GENERIC_DPAD_RIGHT ((USAGE) 0x0092) +#define HID_USAGE_GENERIC_DPAD_LEFT ((USAGE) 0x0093) +#define HID_USAGE_GENERIC_INDEX_TRIGGER ((USAGE) 0x0094) +#define HID_USAGE_GENERIC_PALM_TRIGGER ((USAGE) 0x0095) +#define HID_USAGE_GENERIC_THUMBSTICK ((USAGE) 0x0096) +#define HID_USAGE_GENERIC_SYSCTL_FN ((USAGE) 0x0097) +#define HID_USAGE_GENERIC_SYSCTL_FN_LOCK ((USAGE) 0x0098) +#define HID_USAGE_GENERIC_SYSCTL_FN_LOCK_INDICATOR ((USAGE) 0x0099) +#define HID_USAGE_GENERIC_SYSCTL_DISMISS_NOTIFICATION ((USAGE) 0x009A) +#define HID_USAGE_GENERIC_SYSTEM_DO_NOT_DISTURB ((USAGE) 0x009B) +#define HID_USAGE_GENERIC_SYSCTL_DOCK ((USAGE) 0x00A0) +#define HID_USAGE_GENERIC_SYSCTL_UNDOCK ((USAGE) 0x00A1) +#define HID_USAGE_GENERIC_SYSCTL_SETUP ((USAGE) 0x00A2) +#define HID_USAGE_GENERIC_SYSCTL_SYS_BREAK ((USAGE) 0x00A3) +#define HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK ((USAGE) 0x00A4) +#define HID_USAGE_GENERIC_SYSCTL_APP_BREAK ((USAGE) 0x00A5) +#define HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK ((USAGE) 0x00A6) +#define HID_USAGE_GENERIC_SYSCTL_MUTE ((USAGE) 0x00A7) +#define HID_USAGE_GENERIC_SYSCTL_HIBERNATE ((USAGE) 0x00A8) +#define HID_USAGE_GENERIC_SYSCTL_MICROPHONE_MUTE ((USAGE) 0x00A9) +#define HID_USAGE_GENERIC_SYSCTL_DISP_INVERT ((USAGE) 0x00B0) +#define HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL ((USAGE) 0x00B1) +#define HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL ((USAGE) 0x00B2) +#define HID_USAGE_GENERIC_SYSCTL_DISP_BOTH ((USAGE) 0x00B3) +#define HID_USAGE_GENERIC_SYSCTL_DISP_DUAL ((USAGE) 0x00B4) +#define HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE ((USAGE) 0x00B5) +#define HID_USAGE_GENERIC_SYSCTL_DISP_SWAP ((USAGE) 0x00B6) +#define HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE ((USAGE) 0x00B7) +#define HID_USAGE_GENERIC_SENSOR_ZONE ((USAGE) 0x00C0) +#define HID_USAGE_GENERIC_RPM ((USAGE) 0x00C1) +#define HID_USAGE_GENERIC_COOLANT_LEVEL ((USAGE) 0x00C2) +#define HID_USAGE_GENERIC_COOLANT_CRITICAL_LEVEL ((USAGE) 0x00C3) +#define HID_USAGE_GENERIC_COOLANT_PUMP ((USAGE) 0x00C4) +#define HID_USAGE_GENERIC_CHASSIS_ENCLOSURE ((USAGE) 0x00C5) +#define HID_USAGE_GENERIC_WIRELESS_RADIO_BUTTON ((USAGE) 0x00C6) +#define HID_USAGE_GENERIC_WIRELESS_RADIO_LED ((USAGE) 0x00C7) +#define HID_USAGE_GENERIC_WIRELESS_RADIO_SLIDER_SWITCH ((USAGE) 0x00C8) +#define HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON ((USAGE) 0x00C9) +#define HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH ((USAGE) 0x00CA) +#define HID_USAGE_GENERIC_CONTROL_ENABLE ((USAGE) 0x00CB) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_UNIQUE_ID ((USAGE) 0x00D0) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_VENDOR_ID ((USAGE) 0x00D1) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_PRIMARY_USAGE_PAGE ((USAGE) 0x00D2) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_PRIMARY_USAGE_ID ((USAGE) 0x00D3) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_DOCKING_STATE ((USAGE) 0x00D4) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_DISPLAY_OCCLUSION ((USAGE) 0x00D5) +#define HID_USAGE_GENERIC_DOCKABLE_DEVICE_OBJECT_TYPE ((USAGE) 0x00D6) +#define HID_USAGE_GENERIC_CALL_ACTIVE_LED ((USAGE) 0x00E0) +#define HID_USAGE_GENERIC_CALL_MUTE_TOGGLE ((USAGE) 0x00E1) +#define HID_USAGE_GENERIC_CALL_MUTE_LED ((USAGE) 0x00E2) + +// +// Generic Device Controls Page (0x06) +// +#define HID_USAGE_GENERIC_DEVICE_BACKGROUNDNONUSER_CONTROLS ((USAGE) 0x0001) +#define HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH ((USAGE) 0x0020) +#define HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL ((USAGE) 0x0021) +#define HID_USAGE_GENERIC_DEVICE_WIRELESS_ID ((USAGE) 0x0022) +#define HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL ((USAGE) 0x0023) +#define HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ENTERED ((USAGE) 0x0024) +#define HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED ((USAGE) 0x0025) +#define HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED ((USAGE) 0x0026) +#define HID_USAGE_GENERIC_DEVICE_SEQUENCE_ID ((USAGE) 0x0027) +#define HID_USAGE_GENERIC_DEVICE_SEQUENCE_ID_RESET ((USAGE) 0x0028) +#define HID_USAGE_GENERIC_DEVICE_RF_SIGNAL_STRENGTH ((USAGE) 0x0029) +#define HID_USAGE_GENERIC_DEVICE_SOFTWARE_VERSION ((USAGE) 0x002A) +#define HID_USAGE_GENERIC_DEVICE_PROTOCOL_VERSION ((USAGE) 0x002B) +#define HID_USAGE_GENERIC_DEVICE_HARDWARE_VERSION ((USAGE) 0x002C) +#define HID_USAGE_GENERIC_DEVICE_MAJOR ((USAGE) 0x002D) +#define HID_USAGE_GENERIC_DEVICE_MINOR ((USAGE) 0x002E) +#define HID_USAGE_GENERIC_DEVICE_REVISION ((USAGE) 0x002F) +#define HID_USAGE_GENERIC_DEVICE_HANDEDNESS ((USAGE) 0x0030) +#define HID_USAGE_GENERIC_DEVICE_EITHER_HAND ((USAGE) 0x0031) +#define HID_USAGE_GENERIC_DEVICE_LEFT_HAND ((USAGE) 0x0032) +#define HID_USAGE_GENERIC_DEVICE_RIGHT_HAND ((USAGE) 0x0033) +#define HID_USAGE_GENERIC_DEVICE_BOTH_HANDS ((USAGE) 0x0034) +#define HID_USAGE_GENERIC_DEVICE_GRIP_POSE_OFFSET ((USAGE) 0x0040) +#define HID_USAGE_GENERIC_DEVICE_POINTER_POSE_OFFSET ((USAGE) 0x0041) + +// +// Haptics Page (0x0E) +// +#define HID_USAGE_HAPTICS_SIMPLE_CONTROLLER ((USAGE) 0x0001) +#define HID_USAGE_HAPTICS_WAVEFORM_LIST ((USAGE) 0x0010) +#define HID_USAGE_HAPTICS_DURATION_LIST ((USAGE) 0x0011) +#define HID_USAGE_HAPTICS_AUTO_TRIGGER ((USAGE) 0x0020) +#define HID_USAGE_HAPTICS_MANUAL_TRIGGER ((USAGE) 0x0021) +#define HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL ((USAGE) 0x0022) +#define HID_USAGE_HAPTICS_INTENSITY ((USAGE) 0x0023) +#define HID_USAGE_HAPTICS_REPEAT_COUNT ((USAGE) 0x0024) +#define HID_USAGE_HAPTICS_RETRIGGER_PERIOD ((USAGE) 0x0025) +#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE ((USAGE) 0x0026) +#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID ((USAGE) 0x0027) +#define HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME ((USAGE) 0x0028) +#define HID_USAGE_HAPTICS_WAVEFORM_NONE ((USAGE) 0x1001) +#define HID_USAGE_HAPTICS_WAVEFORM_STOP ((USAGE) 0x1002) +#define HID_USAGE_HAPTICS_WAVEFORM_CLICK ((USAGE) 0x1003) +#define HID_USAGE_HAPTICS_WAVEFORM_BUZZ ((USAGE) 0x1004) +#define HID_USAGE_HAPTICS_WAVEFORM_RUMBLE ((USAGE) 0x1005) +#define HID_USAGE_HAPTICS_WAVEFORM_PRESS ((USAGE) 0x1006) +#define HID_USAGE_HAPTICS_WAVEFORM_RELEASE ((USAGE) 0x1007) +#define HID_USAGE_HAPTICS_WAVEFORM_HOVER ((USAGE) 0x1008) +#define HID_USAGE_HAPTICS_WAVEFORM_SUCCESS ((USAGE) 0x1009) +#define HID_USAGE_HAPTICS_WAVEFORM_ERROR ((USAGE) 0x100A) +#define HID_USAGE_HAPTICS_WAVEFORM_INK_CONTINUOUS ((USAGE) 0x100B) +#define HID_USAGE_HAPTICS_WAVEFORM_PENCIL_CONTINUOUS ((USAGE) 0x100C) +#define HID_USAGE_HAPTICS_WAVEFORM_MARKER_CONTINUOUS ((USAGE) 0x100D) +#define HID_USAGE_HAPTICS_WAVEFORM_CHISEL_MARKER_CONTINUOUS ((USAGE) 0x100E) +#define HID_USAGE_HAPTICS_WAVEFORM_BRUSH_CONTINUOUS ((USAGE) 0x100F) +#define HID_USAGE_HAPTICS_WAVEFORM_ERASER_CONTINUOUS ((USAGE) 0x1010) +#define HID_USAGE_HAPTICS_WAVEFORM_SPARKLE_CONTINUOUS ((USAGE) 0x1011) + +// +// Keyboard/Keypad Page (0x07) +// +#define HID_USAGE_KEYBOARD_NOEVENT ((USAGE) 0x0000) +#define HID_USAGE_KEYBOARD_ROLLOVER ((USAGE) 0x0001) +#define HID_USAGE_KEYBOARD_POSTFAIL ((USAGE) 0x0002) +#define HID_USAGE_KEYBOARD_UNDEFINED ((USAGE) 0x0003) +#define HID_USAGE_KEYBOARD_aA ((USAGE) 0x0004) +#define HID_USAGE_KEYBOARD_bB ((USAGE) 0x0005) +#define HID_USAGE_KEYBOARD_cC ((USAGE) 0x0006) +#define HID_USAGE_KEYBOARD_dD ((USAGE) 0x0007) +#define HID_USAGE_KEYBOARD_eE ((USAGE) 0x0008) +#define HID_USAGE_KEYBOARD_fF ((USAGE) 0x0009) +#define HID_USAGE_KEYBOARD_gG ((USAGE) 0x000A) +#define HID_USAGE_KEYBOARD_hH ((USAGE) 0x000B) +#define HID_USAGE_KEYBOARD_iI ((USAGE) 0x000C) +#define HID_USAGE_KEYBOARD_jJ ((USAGE) 0x000D) +#define HID_USAGE_KEYBOARD_kK ((USAGE) 0x000E) +#define HID_USAGE_KEYBOARD_lL ((USAGE) 0x000F) +#define HID_USAGE_KEYBOARD_mM ((USAGE) 0x0010) +#define HID_USAGE_KEYBOARD_nN ((USAGE) 0x0011) +#define HID_USAGE_KEYBOARD_oO ((USAGE) 0x0012) +#define HID_USAGE_KEYBOARD_pP ((USAGE) 0x0013) +#define HID_USAGE_KEYBOARD_qQ ((USAGE) 0x0014) +#define HID_USAGE_KEYBOARD_rR ((USAGE) 0x0015) +#define HID_USAGE_KEYBOARD_sS ((USAGE) 0x0016) +#define HID_USAGE_KEYBOARD_tT ((USAGE) 0x0017) +#define HID_USAGE_KEYBOARD_uU ((USAGE) 0x0018) +#define HID_USAGE_KEYBOARD_vV ((USAGE) 0x0019) +#define HID_USAGE_KEYBOARD_wW ((USAGE) 0x001A) +#define HID_USAGE_KEYBOARD_xX ((USAGE) 0x001B) +#define HID_USAGE_KEYBOARD_yY ((USAGE) 0x001C) +#define HID_USAGE_KEYBOARD_zZ ((USAGE) 0x001D) +#define HID_USAGE_KEYBOARD_ONE ((USAGE) 0x001E) +#define HID_USAGE_KEYBOARD_TWO_AND_AT ((USAGE) 0x001F) +#define HID_USAGE_KEYBOARD_THREE_AND_HASH ((USAGE) 0x0020) +#define HID_USAGE_KEYBOARD_FOUR_AND_DOLLAR ((USAGE) 0x0021) +#define HID_USAGE_KEYBOARD_FIVE_AND_PERCENT ((USAGE) 0x0022) +#define HID_USAGE_KEYBOARD_SIX_AND_CARET ((USAGE) 0x0023) +#define HID_USAGE_KEYBOARD_SEVEN_AND_AMPERSAND ((USAGE) 0x0024) +#define HID_USAGE_KEYBOARD_EIGHT_AND_STAR ((USAGE) 0x0025) +#define HID_USAGE_KEYBOARD_NINE_AND_LEFT_BRACKET ((USAGE) 0x0026) +#define HID_USAGE_KEYBOARD_ZERO ((USAGE) 0x0027) +#define HID_USAGE_KEYBOARD_RETURN ((USAGE) 0x0028) +#define HID_USAGE_KEYBOARD_ESCAPE ((USAGE) 0x0029) +#define HID_USAGE_KEYBOARD_DELETE ((USAGE) 0x002A) +#define HID_USAGE_KEYBOARD_TAB ((USAGE) 0x002B) +#define HID_USAGE_KEYBOARD_SPACEBAR ((USAGE) 0x002C) +#define HID_USAGE_KEYBOARD_DASH_AND_UNDERSCORE ((USAGE) 0x002D) +#define HID_USAGE_KEYBOARD_EQUALS_AND_PLUS ((USAGE) 0x002E) +#define HID_USAGE_KEYBOARD_LEFT_BRACE ((USAGE) 0x002F) +#define HID_USAGE_KEYBOARD_RIGHT_BRACE ((USAGE) 0x0030) +#define HID_USAGE_KEYBOARD_BACKSLASH_AND_PIPE ((USAGE) 0x0031) +#define HID_USAGE_KEYBOARD_NONUS_HASH_AND_TILDE ((USAGE) 0x0032) +#define HID_USAGE_KEYBOARD_SEMICOLON_AND_COLON ((USAGE) 0x0033) +#define HID_USAGE_KEYBOARD_LEFT_APOS_AND_DOUBLE ((USAGE) 0x0034) +#define HID_USAGE_KEYBOARD_GRAVE_ACCENT_AND_TILDE ((USAGE) 0x0035) +#define HID_USAGE_KEYBOARD_COMMA_AND_LESSTHAN ((USAGE) 0x0036) +#define HID_USAGE_KEYBOARD_PERIOD_AND_GREATERTHAN ((USAGE) 0x0037) +#define HID_USAGE_KEYBOARD_FORWARDSLASH_AND_QUESTIONMARK ((USAGE) 0x0038) +#define HID_USAGE_KEYBOARD_CAPS_LOCK ((USAGE) 0x0039) +#define HID_USAGE_KEYBOARD_F1 ((USAGE) 0x003A) +#define HID_USAGE_KEYBOARD_F2 ((USAGE) 0x003B) +#define HID_USAGE_KEYBOARD_F3 ((USAGE) 0x003C) +#define HID_USAGE_KEYBOARD_F4 ((USAGE) 0x003D) +#define HID_USAGE_KEYBOARD_F5 ((USAGE) 0x003E) +#define HID_USAGE_KEYBOARD_F6 ((USAGE) 0x003F) +#define HID_USAGE_KEYBOARD_F7 ((USAGE) 0x0040) +#define HID_USAGE_KEYBOARD_F8 ((USAGE) 0x0041) +#define HID_USAGE_KEYBOARD_F9 ((USAGE) 0x0042) +#define HID_USAGE_KEYBOARD_F10 ((USAGE) 0x0043) +#define HID_USAGE_KEYBOARD_F11 ((USAGE) 0x0044) +#define HID_USAGE_KEYBOARD_F12 ((USAGE) 0x0045) +#define HID_USAGE_KEYBOARD_PRINT_SCREEN ((USAGE) 0x0046) +#define HID_USAGE_KEYBOARD_SCROLL_LOCK ((USAGE) 0x0047) +#define HID_USAGE_KEYBOARD_PAUSE ((USAGE) 0x0048) +#define HID_USAGE_KEYBOARD_INSERT ((USAGE) 0x0049) +#define HID_USAGE_KEYBOARD_HOME ((USAGE) 0x004A) +#define HID_USAGE_KEYBOARD_PAGEUP ((USAGE) 0x004B) +#define HID_USAGE_KEYBOARD_DELETE_FORWARD ((USAGE) 0x004C) +#define HID_USAGE_KEYBOARD_END ((USAGE) 0x004D) +#define HID_USAGE_KEYBOARD_PAGEDOWN ((USAGE) 0x004E) +#define HID_USAGE_KEYBOARD_RIGHTARROW ((USAGE) 0x004F) +#define HID_USAGE_KEYBOARD_LEFTARROW ((USAGE) 0x0050) +#define HID_USAGE_KEYBOARD_DOWNARROW ((USAGE) 0x0051) +#define HID_USAGE_KEYBOARD_UPARROW ((USAGE) 0x0052) +#define HID_USAGE_KEYBOARD_NUM_LOCK ((USAGE) 0x0053) +#define HID_USAGE_KEYBOARD_KEYPAD_FORWARDSLASH ((USAGE) 0x0054) +#define HID_USAGE_KEYBOARD_KEYPAD_STAR ((USAGE) 0x0055) +#define HID_USAGE_KEYBOARD_DASH ((USAGE) 0x0056) +#define HID_USAGE_KEYBOARD_KEYPAD_PLUS ((USAGE) 0x0057) +#define HID_USAGE_KEYBOARD_KEYPAD_ENTER ((USAGE) 0x0058) +#define HID_USAGE_KEYBOARD_KEYPAD_ONE_AND_END ((USAGE) 0x0059) +#define HID_USAGE_KEYBOARD_KEYPAD_TWO_AND_DOWN_ARROW ((USAGE) 0x005A) +#define HID_USAGE_KEYBOARD_KEYPAD_THREE_AND_PAGEDN ((USAGE) 0x005B) +#define HID_USAGE_KEYBOARD_KEYPAD_FOUR_AND_LEFT_ARROW ((USAGE) 0x005C) +#define HID_USAGE_KEYBOARD_KEYPAD_FIVE ((USAGE) 0x005D) +#define HID_USAGE_KEYBOARD_KEYPAD_SIX_AND_RIGHT_ARROW ((USAGE) 0x005E) +#define HID_USAGE_KEYBOARD_KEYPAD_SEVEN_AND_HOME ((USAGE) 0x005F) +#define HID_USAGE_KEYBOARD_KEYPAD_EIGHT_AND_UP_ARROW ((USAGE) 0x0060) +#define HID_USAGE_KEYBOARD_KEYPAD_NINE_AND_PAGEUP ((USAGE) 0x0061) +#define HID_USAGE_KEYBOARD_KEYPAD_ZERO_AND_INSERT ((USAGE) 0x0062) +#define HID_USAGE_KEYBOARD_KEYPAD_PERIOD_AND_DELETE ((USAGE) 0x0063) +#define HID_USAGE_KEYBOARD_NONUS_BACKSLASH_AND_PIPE ((USAGE) 0x0064) +#define HID_USAGE_KEYBOARD_APPLICATION ((USAGE) 0x0065) +#define HID_USAGE_KEYBOARD_POWER ((USAGE) 0x0066) +#define HID_USAGE_KEYBOARD_KEYPAD_EQUALS ((USAGE) 0x0067) +#define HID_USAGE_KEYBOARD_F13 ((USAGE) 0x0068) +#define HID_USAGE_KEYBOARD_F14 ((USAGE) 0x0069) +#define HID_USAGE_KEYBOARD_F15 ((USAGE) 0x006A) +#define HID_USAGE_KEYBOARD_F16 ((USAGE) 0x006B) +#define HID_USAGE_KEYBOARD_F17 ((USAGE) 0x006C) +#define HID_USAGE_KEYBOARD_F18 ((USAGE) 0x006D) +#define HID_USAGE_KEYBOARD_F19 ((USAGE) 0x006E) +#define HID_USAGE_KEYBOARD_F20 ((USAGE) 0x006F) +#define HID_USAGE_KEYBOARD_F21 ((USAGE) 0x0070) +#define HID_USAGE_KEYBOARD_F22 ((USAGE) 0x0071) +#define HID_USAGE_KEYBOARD_F23 ((USAGE) 0x0072) +#define HID_USAGE_KEYBOARD_F24 ((USAGE) 0x0073) +#define HID_USAGE_KEYBOARD_EXECUTE ((USAGE) 0x0074) +#define HID_USAGE_KEYBOARD_HELP ((USAGE) 0x0075) +#define HID_USAGE_KEYBOARD_MENU ((USAGE) 0x0076) +#define HID_USAGE_KEYBOARD_SELECT ((USAGE) 0x0077) +#define HID_USAGE_KEYBOARD_STOP ((USAGE) 0x0078) +#define HID_USAGE_KEYBOARD_AGAIN ((USAGE) 0x0079) +#define HID_USAGE_KEYBOARD_UNDO ((USAGE) 0x007A) +#define HID_USAGE_KEYBOARD_CUT ((USAGE) 0x007B) +#define HID_USAGE_KEYBOARD_COPY ((USAGE) 0x007C) +#define HID_USAGE_KEYBOARD_PASTE ((USAGE) 0x007D) +#define HID_USAGE_KEYBOARD_FIND ((USAGE) 0x007E) +#define HID_USAGE_KEYBOARD_MUTE ((USAGE) 0x007F) +#define HID_USAGE_KEYBOARD_VOLUME_UP ((USAGE) 0x0080) +#define HID_USAGE_KEYBOARD_VOLUME_DOWN ((USAGE) 0x0081) +#define HID_USAGE_KEYBOARD_LOCKING_CAPS_LOCK ((USAGE) 0x0082) +#define HID_USAGE_KEYBOARD_LOCKING_NUM_LOCK ((USAGE) 0x0083) +#define HID_USAGE_KEYBOARD_LOCKING_SCROLL_LOCK ((USAGE) 0x0084) +#define HID_USAGE_KEYBOARD_KEYPAD_COMMA ((USAGE) 0x0085) +#define HID_USAGE_KEYBOARD_KEYPAD_EQUAL_SIGN ((USAGE) 0x0086) +#define HID_USAGE_KEYBOARD_INTERNATIONAL1 ((USAGE) 0x0087) +#define HID_USAGE_KEYBOARD_INTERNATIONAL2 ((USAGE) 0x0088) +#define HID_USAGE_KEYBOARD_INTERNATIONAL3 ((USAGE) 0x0089) +#define HID_USAGE_KEYBOARD_INTERNATIONAL4 ((USAGE) 0x008A) +#define HID_USAGE_KEYBOARD_INTERNATIONAL5 ((USAGE) 0x008B) +#define HID_USAGE_KEYBOARD_INTERNATIONAL6 ((USAGE) 0x008C) +#define HID_USAGE_KEYBOARD_INTERNATIONAL7 ((USAGE) 0x008D) +#define HID_USAGE_KEYBOARD_INTERNATIONAL8 ((USAGE) 0x008E) +#define HID_USAGE_KEYBOARD_INTERNATIONAL9 ((USAGE) 0x008F) +#define HID_USAGE_KEYBOARD_LANG1 ((USAGE) 0x0090) +#define HID_USAGE_KEYBOARD_LANG2 ((USAGE) 0x0091) +#define HID_USAGE_KEYBOARD_LANG3 ((USAGE) 0x0092) +#define HID_USAGE_KEYBOARD_LANG4 ((USAGE) 0x0093) +#define HID_USAGE_KEYBOARD_LANG5 ((USAGE) 0x0094) +#define HID_USAGE_KEYBOARD_LANG6 ((USAGE) 0x0095) +#define HID_USAGE_KEYBOARD_LANG7 ((USAGE) 0x0096) +#define HID_USAGE_KEYBOARD_LANG8 ((USAGE) 0x0097) +#define HID_USAGE_KEYBOARD_LANG9 ((USAGE) 0x0098) +#define HID_USAGE_KEYBOARD_ALTERNATE_ERASE ((USAGE) 0x0099) +#define HID_USAGE_KEYBOARD_SYSREQ_ATTENTION ((USAGE) 0x009A) +#define HID_USAGE_KEYBOARD_CANCEL ((USAGE) 0x009B) +#define HID_USAGE_KEYBOARD_CLEAR ((USAGE) 0x009C) +#define HID_USAGE_KEYBOARD_PRIOR ((USAGE) 0x009D) +#define HID_USAGE_KEYBOARD_RETURN_NO_ENTER ((USAGE) 0x009E) +#define HID_USAGE_KEYBOARD_SEPARATOR ((USAGE) 0x009F) +#define HID_USAGE_KEYBOARD_OUT ((USAGE) 0x00A0) +#define HID_USAGE_KEYBOARD_OPER ((USAGE) 0x00A1) +#define HID_USAGE_KEYBOARD_CLEAR_AGAIN ((USAGE) 0x00A2) +#define HID_USAGE_KEYBOARD_CRSEL_PROPS ((USAGE) 0x00A3) +#define HID_USAGE_KEYBOARD_EXSEL ((USAGE) 0x00A4) +#define HID_USAGE_KEYBOARD_KEYPAD_DOUBLE_0 ((USAGE) 0x00B0) +#define HID_USAGE_KEYBOARD_KEYPAD_TRIPLE_0 ((USAGE) 0x00B1) +#define HID_USAGE_KEYBOARD_THOUSANDS_SEPARATOR ((USAGE) 0x00B2) +#define HID_USAGE_KEYBOARD_DECIMAL_SEPARATOR ((USAGE) 0x00B3) +#define HID_USAGE_KEYBOARD_CURRENCY_UNIT ((USAGE) 0x00B4) +#define HID_USAGE_KEYBOARD_CURRENCY_SUBUNIT ((USAGE) 0x00B5) +#define HID_USAGE_KEYBOARD_KEYPAD_LEFT_BRACKET ((USAGE) 0x00B6) +#define HID_USAGE_KEYBOARD_KEYPAD_RIGHT_BRACKET ((USAGE) 0x00B7) +#define HID_USAGE_KEYBOARD_KEYPAD_LEFT_BRACE ((USAGE) 0x00B8) +#define HID_USAGE_KEYBOARD_KEYPAD_RIGHT_BRACE ((USAGE) 0x00B9) +#define HID_USAGE_KEYBOARD_KEYPAD_TAB ((USAGE) 0x00BA) +#define HID_USAGE_KEYBOARD_KEYPAD_BACKSPACE ((USAGE) 0x00BB) +#define HID_USAGE_KEYBOARD_KEYPAD_A ((USAGE) 0x00BC) +#define HID_USAGE_KEYBOARD_KEYPAD_B ((USAGE) 0x00BD) +#define HID_USAGE_KEYBOARD_KEYPAD_C ((USAGE) 0x00BE) +#define HID_USAGE_KEYBOARD_KEYPAD_D ((USAGE) 0x00BF) +#define HID_USAGE_KEYBOARD_KEYPAD_E ((USAGE) 0x00C0) +#define HID_USAGE_KEYBOARD_KEYPAD_F ((USAGE) 0x00C1) +#define HID_USAGE_KEYBOARD_KEYPAD_XOR ((USAGE) 0x00C2) +#define HID_USAGE_KEYBOARD_KEYPAD_CARET ((USAGE) 0x00C3) +#define HID_USAGE_KEYBOARD_KEYPAD_PERCENTAGE ((USAGE) 0x00C4) +#define HID_USAGE_KEYBOARD_KEYPAD_LESS ((USAGE) 0x00C5) +#define HID_USAGE_KEYBOARD_KEYPAD_GREATER ((USAGE) 0x00C6) +#define HID_USAGE_KEYBOARD_KEYPAD_AMPERSAND ((USAGE) 0x00C7) +#define HID_USAGE_KEYBOARD_KEYPAD_DOUBLE_AMPERSAND ((USAGE) 0x00C8) +#define HID_USAGE_KEYBOARD_KEYPAD_BAR ((USAGE) 0x00C9) +#define HID_USAGE_KEYBOARD_KEYPAD_DOUBLE_BAR ((USAGE) 0x00CA) +#define HID_USAGE_KEYBOARD_KEYPAD_COLON ((USAGE) 0x00CB) +#define HID_USAGE_KEYBOARD_KEYPAD_HASH ((USAGE) 0x00CC) +#define HID_USAGE_KEYBOARD_KEYPAD_SPACE ((USAGE) 0x00CD) +#define HID_USAGE_KEYBOARD_KEYPAD_AT ((USAGE) 0x00CE) +#define HID_USAGE_KEYBOARD_KEYPAD_BANG ((USAGE) 0x00CF) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_STORE ((USAGE) 0x00D0) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_RECALL ((USAGE) 0x00D1) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_CLEAR ((USAGE) 0x00D2) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_ADD ((USAGE) 0x00D3) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_SUBTRACT ((USAGE) 0x00D4) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_MULTIPLY ((USAGE) 0x00D5) +#define HID_USAGE_KEYBOARD_KEYPAD_MEMORY_DIVIDE ((USAGE) 0x00D6) +#define HID_USAGE_KEYBOARD_KEYPAD_PLUS_MINUS ((USAGE) 0x00D7) +#define HID_USAGE_KEYBOARD_KEYPAD_CLEAR ((USAGE) 0x00D8) +#define HID_USAGE_KEYBOARD_KEYPAD_CLEAR_ENTRY ((USAGE) 0x00D9) +#define HID_USAGE_KEYBOARD_KEYPAD_BINARY ((USAGE) 0x00DA) +#define HID_USAGE_KEYBOARD_KEYPAD_OCTAL ((USAGE) 0x00DB) +#define HID_USAGE_KEYBOARD_KEYPAD_DECIMAL ((USAGE) 0x00DC) +#define HID_USAGE_KEYBOARD_KEYPAD_HEXADECIMAL ((USAGE) 0x00DD) +#define HID_USAGE_KEYBOARD_LCTRL ((USAGE) 0x00E0) +#define HID_USAGE_KEYBOARD_LSHFT ((USAGE) 0x00E1) +#define HID_USAGE_KEYBOARD_LALT ((USAGE) 0x00E2) +#define HID_USAGE_KEYBOARD_LGUI ((USAGE) 0x00E3) +#define HID_USAGE_KEYBOARD_RCTRL ((USAGE) 0x00E4) +#define HID_USAGE_KEYBOARD_RSHFT ((USAGE) 0x00E5) +#define HID_USAGE_KEYBOARD_RALT ((USAGE) 0x00E6) +#define HID_USAGE_KEYBOARD_RGUI ((USAGE) 0x00E7) + +// +// LED Page (0x08) +// +#define HID_USAGE_LED_NUM_LOCK ((USAGE) 0x0001) +#define HID_USAGE_LED_CAPS_LOCK ((USAGE) 0x0002) +#define HID_USAGE_LED_SCROLL_LOCK ((USAGE) 0x0003) +#define HID_USAGE_LED_COMPOSE ((USAGE) 0x0004) +#define HID_USAGE_LED_KANA ((USAGE) 0x0005) +#define HID_USAGE_LED_POWER ((USAGE) 0x0006) +#define HID_USAGE_LED_SHIFT ((USAGE) 0x0007) +#define HID_USAGE_LED_DO_NOT_DISTURB ((USAGE) 0x0008) +#define HID_USAGE_LED_MUTE ((USAGE) 0x0009) +#define HID_USAGE_LED_TONE_ENABLE ((USAGE) 0x000A) +#define HID_USAGE_LED_HIGH_CUT_FILTER ((USAGE) 0x000B) +#define HID_USAGE_LED_LOW_CUT_FILTER ((USAGE) 0x000C) +#define HID_USAGE_LED_EQUALIZER_ENABLE ((USAGE) 0x000D) +#define HID_USAGE_LED_SOUND_FIELD_ON ((USAGE) 0x000E) +#define HID_USAGE_LED_SURROUND_FIELD_ON ((USAGE) 0x000F) +#define HID_USAGE_LED_REPEAT ((USAGE) 0x0010) +#define HID_USAGE_LED_STEREO ((USAGE) 0x0011) +#define HID_USAGE_LED_SAMPLING_RATE_DETECT ((USAGE) 0x0012) +#define HID_USAGE_LED_SPINNING ((USAGE) 0x0013) +#define HID_USAGE_LED_CAV ((USAGE) 0x0014) +#define HID_USAGE_LED_CLV ((USAGE) 0x0015) +#define HID_USAGE_LED_RECORDING_FORMAT_DET ((USAGE) 0x0016) +#define HID_USAGE_LED_OFF_HOOK ((USAGE) 0x0017) +#define HID_USAGE_LED_RING ((USAGE) 0x0018) +#define HID_USAGE_LED_MESSAGE_WAITING ((USAGE) 0x0019) +#define HID_USAGE_LED_DATA_MODE ((USAGE) 0x001A) +#define HID_USAGE_LED_BATTERY_OPERATION ((USAGE) 0x001B) +#define HID_USAGE_LED_BATTERY_OK ((USAGE) 0x001C) +#define HID_USAGE_LED_BATTERY_LOW ((USAGE) 0x001D) +#define HID_USAGE_LED_SPEAKER ((USAGE) 0x001E) +#define HID_USAGE_LED_HEAD_SET ((USAGE) 0x001F) +#define HID_USAGE_LED_HOLD ((USAGE) 0x0020) +#define HID_USAGE_LED_MICROPHONE ((USAGE) 0x0021) +#define HID_USAGE_LED_COVERAGE ((USAGE) 0x0022) +#define HID_USAGE_LED_NIGHT_MODE ((USAGE) 0x0023) +#define HID_USAGE_LED_SEND_CALLS ((USAGE) 0x0024) +#define HID_USAGE_LED_CALL_PICKUP ((USAGE) 0x0025) +#define HID_USAGE_LED_CONFERENCE ((USAGE) 0x0026) +#define HID_USAGE_LED_STAND_BY ((USAGE) 0x0027) +#define HID_USAGE_LED_CAMERA_ON ((USAGE) 0x0028) +#define HID_USAGE_LED_CAMERA_OFF ((USAGE) 0x0029) +#define HID_USAGE_LED_ON_LINE ((USAGE) 0x002A) +#define HID_USAGE_LED_OFF_LINE ((USAGE) 0x002B) +#define HID_USAGE_LED_BUSY ((USAGE) 0x002C) +#define HID_USAGE_LED_READY ((USAGE) 0x002D) +#define HID_USAGE_LED_PAPER_OUT ((USAGE) 0x002E) +#define HID_USAGE_LED_PAPER_JAM ((USAGE) 0x002F) +#define HID_USAGE_LED_REMOTE ((USAGE) 0x0030) +#define HID_USAGE_LED_FORWARD ((USAGE) 0x0031) +#define HID_USAGE_LED_REVERSE ((USAGE) 0x0032) +#define HID_USAGE_LED_STOP ((USAGE) 0x0033) +#define HID_USAGE_LED_REWIND ((USAGE) 0x0034) +#define HID_USAGE_LED_FAST_FORWARD ((USAGE) 0x0035) +#define HID_USAGE_LED_PLAY ((USAGE) 0x0036) +#define HID_USAGE_LED_PAUSE ((USAGE) 0x0037) +#define HID_USAGE_LED_RECORD ((USAGE) 0x0038) +#define HID_USAGE_LED_ERROR ((USAGE) 0x0039) +#define HID_USAGE_LED_SELECTED_INDICATOR ((USAGE) 0x003A) +#define HID_USAGE_LED_IN_USE_INDICATOR ((USAGE) 0x003B) +#define HID_USAGE_LED_MULTI_MODE_INDICATOR ((USAGE) 0x003C) +#define HID_USAGE_LED_INDICATOR_ON ((USAGE) 0x003D) +#define HID_USAGE_LED_INDICATOR_FLASH ((USAGE) 0x003E) +#define HID_USAGE_LED_INDICATOR_SLOW_BLINK ((USAGE) 0x003F) +#define HID_USAGE_LED_INDICATOR_FAST_BLINK ((USAGE) 0x0040) +#define HID_USAGE_LED_INDICATOR_OFF ((USAGE) 0x0041) +#define HID_USAGE_LED_FLASH_ON_TIME ((USAGE) 0x0042) +#define HID_USAGE_LED_SLOW_BLINK_ON_TIME ((USAGE) 0x0043) +#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME ((USAGE) 0x0044) +#define HID_USAGE_LED_FAST_BLINK_ON_TIME ((USAGE) 0x0045) +#define HID_USAGE_LED_FAST_BLINK_OFF_TIME ((USAGE) 0x0046) +#define HID_USAGE_LED_INDICATOR_COLOR ((USAGE) 0x0047) +#define HID_USAGE_LED_RED ((USAGE) 0x0048) +#define HID_USAGE_LED_GREEN ((USAGE) 0x0049) +#define HID_USAGE_LED_AMBER ((USAGE) 0x004A) +#define HID_USAGE_LED_GENERIC_INDICATOR ((USAGE) 0x004B) +#define HID_USAGE_LED_SYSTEM_SUSPEND ((USAGE) 0x004C) +#define HID_USAGE_LED_EXTERNAL_POWER ((USAGE) 0x004D) +#define HID_USAGE_LED_INDICATOR_BLUE ((USAGE) 0x004E) +#define HID_USAGE_LED_INDICATOR_ORANGE ((USAGE) 0x004F) +#define HID_USAGE_LED_GOOD_STATUS ((USAGE) 0x0050) +#define HID_USAGE_LED_WARNING_STATUS ((USAGE) 0x0051) +#define HID_USAGE_LED_RGB_LED ((USAGE) 0x0052) +#define HID_USAGE_LED_RED_LED_CHANNEL ((USAGE) 0x0053) +#define HID_USAGE_LED_BLUE_LED_CHANNEL ((USAGE) 0x0054) +#define HID_USAGE_LED_GREEN_LED_CHANNEL ((USAGE) 0x0055) +#define HID_USAGE_LED_LED_INTENSITY ((USAGE) 0x0056) +#define HID_USAGE_LED_SYSTEM_MICROPHONE_MUTE ((USAGE) 0x0057) +#define HID_USAGE_LED_PLAYER_INDICATOR ((USAGE) 0x0060) +#define HID_USAGE_LED_PLAYER_1 ((USAGE) 0x0061) +#define HID_USAGE_LED_PLAYER_2 ((USAGE) 0x0062) +#define HID_USAGE_LED_PLAYER_3 ((USAGE) 0x0063) +#define HID_USAGE_LED_PLAYER_4 ((USAGE) 0x0064) +#define HID_USAGE_LED_PLAYER_5 ((USAGE) 0x0065) +#define HID_USAGE_LED_PLAYER_6 ((USAGE) 0x0066) +#define HID_USAGE_LED_PLAYER_7 ((USAGE) 0x0067) +#define HID_USAGE_LED_PLAYER_8 ((USAGE) 0x0068) + +// +// Lighting And Illumination Page (0x59) +// +#define HID_USAGE_LAMPARRAY ((USAGE) 0x0001) +#define HID_USAGE_LAMPARRAY_ATTRBIUTES_REPORT ((USAGE) 0x0002) +#define HID_USAGE_LAMPARRAY_LAMP_COUNT ((USAGE) 0x0003) +#define HID_USAGE_LAMPARRAY_BOUNDING_BOX_WIDTH_IN_MICROMETERS ((USAGE) 0x0004) +#define HID_USAGE_LAMPARRAY_BOUNDING_BOX_HEIGHT_IN_MICROMETERS ((USAGE) 0x0005) +#define HID_USAGE_LAMPARRAY_BOUNDING_BOX_DEPTH_IN_MICROMETERS ((USAGE) 0x0006) +#define HID_USAGE_LAMPARRAY_KIND ((USAGE) 0x0007) +#define HID_USAGE_LAMPARRAY_MIN_UPDATE_INTERVAL_IN_MICROSECONDS ((USAGE) 0x0008) +#define HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_REQUEST_REPORT ((USAGE) 0x0020) +#define HID_USAGE_LAMPARRAY_LAMP_ID ((USAGE) 0x0021) +#define HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_RESPONSE_REPORT ((USAGE) 0x0022) +#define HID_USAGE_LAMPARRAY_POSITION_X_IN_MICROMETERS ((USAGE) 0x0023) +#define HID_USAGE_LAMPARRAY_POSITION_Y_IN_MICROMETERS ((USAGE) 0x0024) +#define HID_USAGE_LAMPARRAY_POSITION_Z_IN_MICROMETERS ((USAGE) 0x0025) +#define HID_USAGE_LAMPARRAY_LAMP_PURPOSES ((USAGE) 0x0026) +#define HID_USAGE_LAMPARRAY_UPDATE_LATENCY_IN_MICROSECONDS ((USAGE) 0x0027) +#define HID_USAGE_LAMPARRAY_RED_LEVEL_COUNT ((USAGE) 0x0028) +#define HID_USAGE_LAMPARRAY_GREEN_LEVEL_COUNT ((USAGE) 0x0029) +#define HID_USAGE_LAMPARRAY_BLUE_LEVEL_COUNT ((USAGE) 0x002A) +#define HID_USAGE_LAMPARRAY_INTENSITY_LEVEL_COUNT ((USAGE) 0x002B) +#define HID_USAGE_LAMPARRAY_IS_PROGRAMMABLE ((USAGE) 0x002C) +#define HID_USAGE_LAMPARRAY_INPUT_BINDING ((USAGE) 0x002D) +#define HID_USAGE_LAMPARRAY_LAMP_MULTI_UPDATE_REPORT ((USAGE) 0x0050) +#define HID_USAGE_LAMPARRAY_LAMP_RED_UPDATE_CHANNEL ((USAGE) 0x0051) +#define HID_USAGE_LAMPARRAY_LAMP_GREEN_UPDATE_CHANNEL ((USAGE) 0x0052) +#define HID_USAGE_LAMPARRAY_LAMP_BLUE_UPDATE_CHANNEL ((USAGE) 0x0053) +#define HID_USAGE_LAMPARRAY_LAMP_INTENSITY_UPDATE_CHANNEL ((USAGE) 0x0054) +#define HID_USAGE_LAMPARRAY_LAMP_UPDATE_FLAGS ((USAGE) 0x0055) +#define HID_USAGE_LAMPARRAY_LAMP_RANGE_UPDATE_REPORT ((USAGE) 0x0060) +#define HID_USAGE_LAMPARRAY_LAMP_ID_START ((USAGE) 0x0061) +#define HID_USAGE_LAMPARRAY_LAMP_ID_END ((USAGE) 0x0062) +#define HID_USAGE_LAMPARRAY_CONTROL_REPORT ((USAGE) 0x0070) +#define HID_USAGE_LAMPARRAY_AUTONOMOUS_MODE ((USAGE) 0x0071) + +// +// Magnetic Stripe Reader Page (0x8E) +// +#define HID_USAGE_MAGNETIC_STRIPE_READER_MSR_DEVICE_READONLY ((USAGE) 0x0001) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_1_LENGTH ((USAGE) 0x0011) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_2_LENGTH ((USAGE) 0x0012) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_3_LENGTH ((USAGE) 0x0013) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_JIS_LENGTH ((USAGE) 0x0014) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_DATA ((USAGE) 0x0020) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_1_DATA ((USAGE) 0x0021) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_2_DATA ((USAGE) 0x0022) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_3_DATA ((USAGE) 0x0023) +#define HID_USAGE_MAGNETIC_STRIPE_READER_TRACK_JIS_DATA ((USAGE) 0x0024) + +// +// Medical Instrument Page (0x40) +// +#define HID_USAGE_MEDICAL_INSTRUMENT_MEDICAL_ULTRASOUND ((USAGE) 0x0001) +#define HID_USAGE_MEDICAL_INSTRUMENT_VCRACQUISITION ((USAGE) 0x0020) +#define HID_USAGE_MEDICAL_INSTRUMENT_FREEZETHAW ((USAGE) 0x0021) +#define HID_USAGE_MEDICAL_INSTRUMENT_CLIP_STORE ((USAGE) 0x0022) +#define HID_USAGE_MEDICAL_INSTRUMENT_UPDATE ((USAGE) 0x0023) +#define HID_USAGE_MEDICAL_INSTRUMENT_NEXT ((USAGE) 0x0024) +#define HID_USAGE_MEDICAL_INSTRUMENT_SAVE ((USAGE) 0x0025) +#define HID_USAGE_MEDICAL_INSTRUMENT_PRINT ((USAGE) 0x0026) +#define HID_USAGE_MEDICAL_INSTRUMENT_MICROPHONE_ENABLE ((USAGE) 0x0027) +#define HID_USAGE_MEDICAL_INSTRUMENT_CINE ((USAGE) 0x0040) +#define HID_USAGE_MEDICAL_INSTRUMENT_TRANSMIT_POWER ((USAGE) 0x0041) +#define HID_USAGE_MEDICAL_INSTRUMENT_VOLUME ((USAGE) 0x0042) +#define HID_USAGE_MEDICAL_INSTRUMENT_FOCUS ((USAGE) 0x0043) +#define HID_USAGE_MEDICAL_INSTRUMENT_DEPTH ((USAGE) 0x0044) +#define HID_USAGE_MEDICAL_INSTRUMENT_SOFT_STEP__PRIMARY ((USAGE) 0x0060) +#define HID_USAGE_MEDICAL_INSTRUMENT_SOFT_STEP__SECONDARY ((USAGE) 0x0061) +#define HID_USAGE_MEDICAL_INSTRUMENT_DEPTH_GAIN_COMPENSATION ((USAGE) 0x0070) +#define HID_USAGE_MEDICAL_INSTRUMENT_ZOOM_SELECT ((USAGE) 0x0080) +#define HID_USAGE_MEDICAL_INSTRUMENT_ZOOM_ADJUST ((USAGE) 0x0081) +#define HID_USAGE_MEDICAL_INSTRUMENT_SPECTRAL_DOPPLER_MODE_SELECT ((USAGE) 0x0082) +#define HID_USAGE_MEDICAL_INSTRUMENT_SPECTRAL_DOPPLER_ADJUST ((USAGE) 0x0083) +#define HID_USAGE_MEDICAL_INSTRUMENT_COLOR_DOPPLER_MODE_SELECT ((USAGE) 0x0084) +#define HID_USAGE_MEDICAL_INSTRUMENT_COLOR_DOPPLER_ADJUST ((USAGE) 0x0085) +#define HID_USAGE_MEDICAL_INSTRUMENT_MOTION_MODE_SELECT ((USAGE) 0x0086) +#define HID_USAGE_MEDICAL_INSTRUMENT_MOTION_MODE_ADJUST ((USAGE) 0x0087) +#define HID_USAGE_MEDICAL_INSTRUMENT_2D_MODE_SELECT ((USAGE) 0x0088) +#define HID_USAGE_MEDICAL_INSTRUMENT_2D_MODE_ADJUST ((USAGE) 0x0089) +#define HID_USAGE_MEDICAL_INSTRUMENT_SOFT_CONTROL_SELECT ((USAGE) 0x00A0) +#define HID_USAGE_MEDICAL_INSTRUMENT_SOFT_CONTROL_ADJUST ((USAGE) 0x00A1) + +// +// Microsoft Bluetooth Handsfree Page (0xFFF3) +// +#define HID_USAGE_MICROSOFT_BLUETOOTH_HANDSFREE_GENERAL ((USAGE) 0x0001) +#define HID_USAGE_MICROSOFT_BLUETOOTH_HANDSFREE_DIAL_NUMBER ((USAGE) 0x0021) +#define HID_USAGE_MICROSOFT_BLUETOOTH_HANDSFREE_DIAL_MEMORY ((USAGE) 0x0022) +#define HID_USAGE_MICROSOFT_BLUETOOTH_HANDSFREE_CALL_SETUP ((USAGE) 0x0024) + +// +// Monitor Page (0x80) +// +#define HID_USAGE_MONITOR_MONITOR_CONTROL ((USAGE) 0x0001) +#define HID_USAGE_MONITOR_EDID_INFORMATION ((USAGE) 0x0002) +#define HID_USAGE_MONITOR_VDIF_INFORMATION ((USAGE) 0x0003) +#define HID_USAGE_MONITOR_VESA_VERSION ((USAGE) 0x0004) + +// +// Monitor Enumerated Page (0x81) +// +// There is no need to label these usages. +// + +// +// Ordinal Page (0x0A) +// +// There is no need to label these usages. +// + +// +// Physical Input Device Page (0x0F) +// +#define HID_USAGE_PID_PHYSICAL_INPUT_DEVICE ((USAGE) 0x0001) +#define HID_USAGE_PID_NORMAL ((USAGE) 0x0020) +#define HID_USAGE_PID_SET_EFFECT_REPORT ((USAGE) 0x0021) +#define HID_USAGE_PID_EFFECT_BLOCK_INDEX ((USAGE) 0x0022) +#define HID_USAGE_PID_PARAMETER_BLOCK_OFFSET ((USAGE) 0x0023) +#define HID_USAGE_PID_ROM_FLAG ((USAGE) 0x0024) +#define HID_USAGE_PID_EFFECT_TYPE ((USAGE) 0x0025) +#define HID_USAGE_PID_ET_CONSTANT ((USAGE) 0x0026) +#define HID_USAGE_PID_ET_RAMP ((USAGE) 0x0027) +#define HID_USAGE_PID_ET_CUSTOM ((USAGE) 0x0028) +#define HID_USAGE_PID_ET_SQUARE ((USAGE) 0x0030) +#define HID_USAGE_PID_ET_SINE ((USAGE) 0x0031) +#define HID_USAGE_PID_ET_TRIANGLE ((USAGE) 0x0032) +#define HID_USAGE_PID_ET_SAWTOOTH_UP ((USAGE) 0x0033) +#define HID_USAGE_PID_ET_SAWTOOTH_DOWN ((USAGE) 0x0034) +#define HID_USAGE_PID_ET_SPRING ((USAGE) 0x0040) +#define HID_USAGE_PID_ET_DAMPER ((USAGE) 0x0041) +#define HID_USAGE_PID_ET_INERTIA ((USAGE) 0x0042) +#define HID_USAGE_PID_ET_FRICTION ((USAGE) 0x0043) +#define HID_USAGE_PID_DURATION ((USAGE) 0x0050) +#define HID_USAGE_PID_SAMPLE_PERIOD ((USAGE) 0x0051) +#define HID_USAGE_PID_GAIN ((USAGE) 0x0052) +#define HID_USAGE_PID_TRIGGER_BUTTON ((USAGE) 0x0053) +#define HID_USAGE_PID_TRIGGER_REPEAT_INTERVAL ((USAGE) 0x0054) +#define HID_USAGE_PID_AXES_ENABLE ((USAGE) 0x0055) +#define HID_USAGE_PID_DIRECTION_ENABLE ((USAGE) 0x0056) +#define HID_USAGE_PID_DIRECTION ((USAGE) 0x0057) +#define HID_USAGE_PID_TYPE_SPECIFIC_BLOCK_OFFSET ((USAGE) 0x0058) +#define HID_USAGE_PID_BLOCK_TYPE ((USAGE) 0x0059) +#define HID_USAGE_PID_SET_ENVELOPE_REPORT ((USAGE) 0x005A) +#define HID_USAGE_PID_ATTACK_LEVEL ((USAGE) 0x005B) +#define HID_USAGE_PID_ATTACK_TIME ((USAGE) 0x005C) +#define HID_USAGE_PID_FADE_LEVEL ((USAGE) 0x005D) +#define HID_USAGE_PID_FADE_TIME ((USAGE) 0x005E) +#define HID_USAGE_PID_SET_CONDITION_REPORT ((USAGE) 0x005F) +#define HID_USAGE_PID_CP_OFFSET ((USAGE) 0x0060) +#define HID_USAGE_PID_POSITIVE_COEFFICIENT ((USAGE) 0x0061) +#define HID_USAGE_PID_NEGATIVE_COEFFICIENT ((USAGE) 0x0062) +#define HID_USAGE_PID_POSITIVE_SATURATION ((USAGE) 0x0063) +#define HID_USAGE_PID_NEGATIVE_SATURATION ((USAGE) 0x0064) +#define HID_USAGE_PID_DEAD_BAND ((USAGE) 0x0065) +#define HID_USAGE_PID_DOWNLOAD_FORCE_SAMPLE ((USAGE) 0x0066) +#define HID_USAGE_PID_ISOCH_CUSTOMFORCE_ENABLE ((USAGE) 0x0067) +#define HID_USAGE_PID_CUSTOM_FORCE_DATA_REPORT ((USAGE) 0x0068) +#define HID_USAGE_PID_CUSTOM_FORCE_DATA ((USAGE) 0x0069) +#define HID_USAGE_PID_CUSTOM_FORCE_VENDOR_DEFINED_DATA ((USAGE) 0x006A) +#define HID_USAGE_PID_SET_CUSTOM_FORCE_REPORT ((USAGE) 0x006B) +#define HID_USAGE_PID_CUSTOM_FORCE_DATA_OFFSET ((USAGE) 0x006C) +#define HID_USAGE_PID_SAMPLE_COUNT ((USAGE) 0x006D) +#define HID_USAGE_PID_SET_PERIODIC_REPORT ((USAGE) 0x006E) +#define HID_USAGE_PID_OFFSET ((USAGE) 0x006F) +#define HID_USAGE_PID_MAGNITUDE ((USAGE) 0x0070) +#define HID_USAGE_PID_PHASE ((USAGE) 0x0071) +#define HID_USAGE_PID_PERIOD ((USAGE) 0x0072) +#define HID_USAGE_PID_SET_CONSTANT_FORCE_REPORT ((USAGE) 0x0073) +#define HID_USAGE_PID_SET_RAMP_FORCE_REPORT ((USAGE) 0x0074) +#define HID_USAGE_PID_RAMP_START ((USAGE) 0x0075) +#define HID_USAGE_PID_RAMP_END ((USAGE) 0x0076) +#define HID_USAGE_PID_EFFECT_OPERATION_REPORT ((USAGE) 0x0077) +#define HID_USAGE_PID_EFFECT_OPERATION ((USAGE) 0x0078) +#define HID_USAGE_PID_OP_EFFECT_START ((USAGE) 0x0079) +#define HID_USAGE_PID_OP_EFFECT_START_SOLO ((USAGE) 0x007A) +#define HID_USAGE_PID_OP_EFFECT_STOP ((USAGE) 0x007B) +#define HID_USAGE_PID_LOOP_COUNT ((USAGE) 0x007C) +#define HID_USAGE_PID_DEVICE_GAIN_REPORT ((USAGE) 0x007D) +#define HID_USAGE_PID_DEVICE_GAIN ((USAGE) 0x007E) +#define HID_USAGE_PID_POOL_REPORT ((USAGE) 0x007F) +#define HID_USAGE_PID_RAM_POOL_SIZE ((USAGE) 0x0080) +#define HID_USAGE_PID_ROM_POOL_SIZE ((USAGE) 0x0081) +#define HID_USAGE_PID_ROM_EFFECT_BLOCK_COUNT ((USAGE) 0x0082) +#define HID_USAGE_PID_SIMULTANEOUS_EFFECTS_MAX ((USAGE) 0x0083) +#define HID_USAGE_PID_POOL_ALIGNMENT ((USAGE) 0x0084) +#define HID_USAGE_PID_PARAMETER_BLOCK_MOVE_REPORT ((USAGE) 0x0085) +#define HID_USAGE_PID_MOVE_SOURCE ((USAGE) 0x0086) +#define HID_USAGE_PID_MOVE_DESTINATION ((USAGE) 0x0087) +#define HID_USAGE_PID_MOVE_LENGTH ((USAGE) 0x0088) +#define HID_USAGE_PID_BLOCK_LOAD_REPORT ((USAGE) 0x0089) +#define HID_USAGE_PID_BLOCK_LOAD_STATUS ((USAGE) 0x008B) +#define HID_USAGE_PID_BLOCK_LOAD_SUCCESS ((USAGE) 0x008C) +#define HID_USAGE_PID_BLOCK_LOAD_FULL ((USAGE) 0x008D) +#define HID_USAGE_PID_BLOCK_LOAD_ERROR ((USAGE) 0x008E) +#define HID_USAGE_PID_BLOCK_HANDLE ((USAGE) 0x008F) +#define HID_USAGE_PID_BLOCK_FREE_REPORT ((USAGE) 0x0090) +#define HID_USAGE_PID_TYPE_SPECIFIC_BLOCK_HANDLE ((USAGE) 0x0091) +#define HID_USAGE_PID_STATE_REPORT ((USAGE) 0x0092) +#define HID_USAGE_PID_EFFECT_PLAYING ((USAGE) 0x0094) +#define HID_USAGE_PID_PID_DEVICE_CONTROL_REPORT ((USAGE) 0x0095) +#define HID_USAGE_PID_DEVICE_CONTROL ((USAGE) 0x0096) +#define HID_USAGE_PID_DC_ENABLE_ACTUATORS ((USAGE) 0x0097) +#define HID_USAGE_PID_DC_DISABLE_ACTUATORS ((USAGE) 0x0098) +#define HID_USAGE_PID_DC_STOP_ALL_EFFECTS ((USAGE) 0x0099) +#define HID_USAGE_PID_DC_DEVICE_RESET ((USAGE) 0x009A) +#define HID_USAGE_PID_DC_DEVICE_PAUSE ((USAGE) 0x009B) +#define HID_USAGE_PID_DC_DEVICE_CONTINUE ((USAGE) 0x009C) +#define HID_USAGE_PID_DEVICE_PAUSED ((USAGE) 0x009F) +#define HID_USAGE_PID_ACTUATORS_ENABLED ((USAGE) 0x00A0) +#define HID_USAGE_PID_SAFETY_SWITCH ((USAGE) 0x00A4) +#define HID_USAGE_PID_ACTUATOR_OVERRIDE_SWITCH ((USAGE) 0x00A5) +#define HID_USAGE_PID_ACTUATOR_POWER ((USAGE) 0x00A6) +#define HID_USAGE_PID_START_DELAY ((USAGE) 0x00A7) +#define HID_USAGE_PID_PARAMETER_BLOCK_SIZE ((USAGE) 0x00A8) +#define HID_USAGE_PID_DEVICE_MANAGED_POOL ((USAGE) 0x00A9) +#define HID_USAGE_PID_SHARED_PARAMETER_BLOCKS ((USAGE) 0x00AA) +#define HID_USAGE_PID_CREATE_NEW_EFFECT ((USAGE) 0x00AB) +#define HID_USAGE_PID_RAMPOOL_AVAILABLE ((USAGE) 0x00AC) + +// +// Power Page (0x84) +// +#define HID_USAGE_POWER_INAME ((USAGE) 0x0001) +#define HID_USAGE_POWER_PRESENT_STATUS ((USAGE) 0x0002) +#define HID_USAGE_POWER_CHANGED_STATUS ((USAGE) 0x0003) +#define HID_USAGE_POWER_UPS ((USAGE) 0x0004) +#define HID_USAGE_POWER_POWER_SUPPLY ((USAGE) 0x0005) +#define HID_USAGE_POWER_BATTERY_SYSTEM ((USAGE) 0x0010) +#define HID_USAGE_POWER_BATTERY_SYSTEM_ID ((USAGE) 0x0011) +#define HID_USAGE_POWER_BATTERY ((USAGE) 0x0012) +#define HID_USAGE_POWER_BATTERY_ID ((USAGE) 0x0013) +#define HID_USAGE_POWER_CHARGER ((USAGE) 0x0014) +#define HID_USAGE_POWER_CHARGER_ID ((USAGE) 0x0015) +#define HID_USAGE_POWER_POWER_CONVERTER ((USAGE) 0x0016) +#define HID_USAGE_POWER_POWER_CONVERTER_ID ((USAGE) 0x0017) +#define HID_USAGE_POWER_OUTLET_SYSTEM ((USAGE) 0x0018) +#define HID_USAGE_POWER_OUTLET_SYSTEM_ID ((USAGE) 0x0019) +#define HID_USAGE_POWER_INPUT ((USAGE) 0x001A) +#define HID_USAGE_POWER_INPUT_ID ((USAGE) 0x001B) +#define HID_USAGE_POWER_OUTPUT ((USAGE) 0x001C) +#define HID_USAGE_POWER_OUTPUT_ID ((USAGE) 0x001D) +#define HID_USAGE_POWER_FLOW ((USAGE) 0x001E) +#define HID_USAGE_POWER_FLOW_ID ((USAGE) 0x001F) +#define HID_USAGE_POWER_OUTLET ((USAGE) 0x0020) +#define HID_USAGE_POWER_OUTLET_ID ((USAGE) 0x0021) +#define HID_USAGE_POWER_GANG ((USAGE) 0x0022) +#define HID_USAGE_POWER_GANG_ID ((USAGE) 0x0023) +#define HID_USAGE_POWER_POWER_SUMMARY ((USAGE) 0x0024) +#define HID_USAGE_POWER_POWER_SUMMARY_ID ((USAGE) 0x0025) +#define HID_USAGE_POWER_VOLTAGE ((USAGE) 0x0030) +#define HID_USAGE_POWER_CURRENT ((USAGE) 0x0031) +#define HID_USAGE_POWER_FREQUENCY ((USAGE) 0x0032) +#define HID_USAGE_POWER_APPARENT_POWER ((USAGE) 0x0033) +#define HID_USAGE_POWER_ACTIVE_POWER ((USAGE) 0x0034) +#define HID_USAGE_POWER_PERCENT_LOAD ((USAGE) 0x0035) +#define HID_USAGE_POWER_TEMPERATURE ((USAGE) 0x0036) +#define HID_USAGE_POWER_HUMIDITY ((USAGE) 0x0037) +#define HID_USAGE_POWER_BAD_COUNT ((USAGE) 0x0038) +#define HID_USAGE_POWER_CONFIG_VOLTAGE ((USAGE) 0x0040) +#define HID_USAGE_POWER_CONFIG_CURRENT ((USAGE) 0x0041) +#define HID_USAGE_POWER_CONFIG_FREQUENCY ((USAGE) 0x0042) +#define HID_USAGE_POWER_CONFIG_APPARENT_POWER ((USAGE) 0x0043) +#define HID_USAGE_POWER_CONFIG_ACTIVE_POWER ((USAGE) 0x0044) +#define HID_USAGE_POWER_CONFIG_PERCENT_LOAD ((USAGE) 0x0045) +#define HID_USAGE_POWER_CONFIG_TEMPERATURE ((USAGE) 0x0046) +#define HID_USAGE_POWER_CONFIG_HUMIDITY ((USAGE) 0x0047) +#define HID_USAGE_POWER_SWITCH_ON_CONTROL ((USAGE) 0x0050) +#define HID_USAGE_POWER_SWITCH_OFF_CONTROL ((USAGE) 0x0051) +#define HID_USAGE_POWER_TOGGLE_CONTROL ((USAGE) 0x0052) +#define HID_USAGE_POWER_LOW_VOLTAGE_TRANSFER ((USAGE) 0x0053) +#define HID_USAGE_POWER_HIGH_VOLTAGE_TRANSFER ((USAGE) 0x0054) +#define HID_USAGE_POWER_DELAY_BEFORE_REBOOT ((USAGE) 0x0055) +#define HID_USAGE_POWER_DELAY_BEFORE_STARTUP ((USAGE) 0x0056) +#define HID_USAGE_POWER_DELAY_BEFORE_SHUTDOWN ((USAGE) 0x0057) +#define HID_USAGE_POWER_TEST ((USAGE) 0x0058) +#define HID_USAGE_POWER_MODULE_RESET ((USAGE) 0x0059) +#define HID_USAGE_POWER_AUDIBLE_ALARM_CONTROL ((USAGE) 0x005A) +#define HID_USAGE_POWER_PRESENT ((USAGE) 0x0060) +#define HID_USAGE_POWER_GOOD ((USAGE) 0x0061) +#define HID_USAGE_POWER_INTERNAL_FAILURE ((USAGE) 0x0062) +#define HID_USAGE_POWER_VOLTAG_OUT_OF_RANGE ((USAGE) 0x0063) +#define HID_USAGE_POWER_FREQUENCY_OUT_OF_RANGE ((USAGE) 0x0064) +#define HID_USAGE_POWER_OVERLOAD ((USAGE) 0x0065) +#define HID_USAGE_POWER_OVER_CHARGED ((USAGE) 0x0066) +#define HID_USAGE_POWER_OVER_TEMPERATURE ((USAGE) 0x0067) +#define HID_USAGE_POWER_SHUTDOWN_REQUESTED ((USAGE) 0x0068) +#define HID_USAGE_POWER_SHUTDOWN_IMMINENT ((USAGE) 0x0069) +#define HID_USAGE_POWER_SWITCH_ONOFF ((USAGE) 0x006B) +#define HID_USAGE_POWER_SWITCHABLE ((USAGE) 0x006C) +#define HID_USAGE_POWER_USED ((USAGE) 0x006D) +#define HID_USAGE_POWER_BOOST ((USAGE) 0x006E) +#define HID_USAGE_POWER_BUCK ((USAGE) 0x006F) +#define HID_USAGE_POWER_INITIALIZED ((USAGE) 0x0070) +#define HID_USAGE_POWER_TESTED ((USAGE) 0x0071) +#define HID_USAGE_POWER_AWAITING_POWER ((USAGE) 0x0072) +#define HID_USAGE_POWER_COMMUNICATION_LOST ((USAGE) 0x0073) +#define HID_USAGE_POWER_IMANUFACTURER ((USAGE) 0x00FD) +#define HID_USAGE_POWER_IPRODUCT ((USAGE) 0x00FE) +#define HID_USAGE_POWER_ISERIALNUMBER ((USAGE) 0x00FF) + +// +// Scales Page (0x8D) +// +#define HID_USAGE_WEIGHING_DEVICE_SCALES ((USAGE) 0x0001) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_DEVICE ((USAGE) 0x0020) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS ((USAGE) 0x0021) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_I_METRIC ((USAGE) 0x0022) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_II_METRIC ((USAGE) 0x0023) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_III_METRIC ((USAGE) 0x0024) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_IIIL_METRIC ((USAGE) 0x0025) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_IV_METRIC ((USAGE) 0x0026) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_III_ENGLISH ((USAGE) 0x0027) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_IIIL_ENGLISH ((USAGE) 0x0028) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_IV_ENGLISH ((USAGE) 0x0029) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CLASS_GENERIC ((USAGE) 0x002A) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_ATTRIBUTE_REPORT ((USAGE) 0x0030) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_CONTROL_REPORT ((USAGE) 0x0031) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_DATA_REPORT ((USAGE) 0x0032) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_REPORT ((USAGE) 0x0033) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_WEIGHT_LIMIT_REPORT ((USAGE) 0x0034) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATISTICS_REPORT ((USAGE) 0x0035) +#define HID_USAGE_WEIGHING_DEVICE_DATA_WEIGHT ((USAGE) 0x0040) +#define HID_USAGE_WEIGHING_DEVICE_DATA_SCALING ((USAGE) 0x0041) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT ((USAGE) 0x0050) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_MILLIGRAM ((USAGE) 0x0051) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_GRAM ((USAGE) 0x0052) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_KILOGRAM ((USAGE) 0x0053) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_CARATS ((USAGE) 0x0054) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_TAELS ((USAGE) 0x0055) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_GRAINS ((USAGE) 0x0056) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_PENNYWEIGHTS ((USAGE) 0x0057) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_METRIC_TON ((USAGE) 0x0058) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_AVOIR_TON ((USAGE) 0x0059) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_TROY_OUNCE ((USAGE) 0x005A) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_OUNCE ((USAGE) 0x005B) +#define HID_USAGE_WEIGHING_DEVICE_WEIGHT_UNIT_POUND ((USAGE) 0x005C) +#define HID_USAGE_WEIGHING_DEVICE_CALIBRATION_COUNT ((USAGE) 0x0060) +#define HID_USAGE_WEIGHING_DEVICE_REZERO_COUNT ((USAGE) 0x0061) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS ((USAGE) 0x0070) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_FAULT ((USAGE) 0x0071) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_STABLE_AT_CENTER_OF_ZERO ((USAGE) 0x0072) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_IN_MOTION ((USAGE) 0x0073) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_WEIGHT_STABLE ((USAGE) 0x0074) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_UNDER_ZERO ((USAGE) 0x0075) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_OVER_WEIGHT_LIMIT ((USAGE) 0x0076) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_REQUIRES_CALIBRATION ((USAGE) 0x0077) +#define HID_USAGE_WEIGHING_DEVICE_SCALE_STATUS_REQUIRES_REZEROING ((USAGE) 0x0078) +#define HID_USAGE_WEIGHING_DEVICE_ZERO_SCALE ((USAGE) 0x0080) +#define HID_USAGE_WEIGHING_DEVICE_ENFORCED_ZERO_RETURN ((USAGE) 0x0081) + +// +// Sensors Page (0x20) +// +#define HID_USAGE_SENSORS_SENSOR ((USAGE) 0x0001) +#define HID_USAGE_SENSORS_BIOMETRIC ((USAGE) 0x0010) +#define HID_USAGE_SENSORS_BIOMETRIC_HUMAN_PRESENCE ((USAGE) 0x0011) +#define HID_USAGE_SENSORS_BIOMETRIC_HUMAN_PROXIMITY ((USAGE) 0x0012) +#define HID_USAGE_SENSORS_BIOMETRIC_HUMAN_TOUCH ((USAGE) 0x0013) +#define HID_USAGE_SENSORS_BIOMETRIC_BLOOD_PRESSURE ((USAGE) 0x0014) +#define HID_USAGE_SENSORS_BIOMETRIC_BODY_TEMPERATURE ((USAGE) 0x0015) +#define HID_USAGE_SENSORS_BIOMETRIC_HEART_RATE ((USAGE) 0x0016) +#define HID_USAGE_SENSORS_BIOMETRIC_HEART_RATE_VARIABILITY ((USAGE) 0x0017) +#define HID_USAGE_SENSORS_BIOMETRIC_PERIPHERAL_OXYGEN_SATURATION ((USAGE) 0x0018) +#define HID_USAGE_SENSORS_BIOMETRIC_RESPIRATORY_RATE ((USAGE) 0x0019) +#define HID_USAGE_SENSORS_ELECTRICAL ((USAGE) 0x0020) +#define HID_USAGE_SENSORS_ELECTRICAL_CAPACITANCE ((USAGE) 0x0021) +#define HID_USAGE_SENSORS_ELECTRICAL_CURRENT ((USAGE) 0x0022) +#define HID_USAGE_SENSORS_ELECTRICAL_POWER ((USAGE) 0x0023) +#define HID_USAGE_SENSORS_ELECTRICAL_INDUCTANCE ((USAGE) 0x0024) +#define HID_USAGE_SENSORS_ELECTRICAL_RESISTANCE ((USAGE) 0x0025) +#define HID_USAGE_SENSORS_ELECTRICAL_VOLTAGE ((USAGE) 0x0026) +#define HID_USAGE_SENSORS_ELECTRICAL_POTENTIOMETER ((USAGE) 0x0027) +#define HID_USAGE_SENSORS_ELECTRICAL_FREQUENCY ((USAGE) 0x0028) +#define HID_USAGE_SENSORS_ELECTRICAL_PERIOD ((USAGE) 0x0029) +#define HID_USAGE_SENSORS_ENVIRONMENTAL ((USAGE) 0x0030) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE ((USAGE) 0x0031) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_HUMIDITY ((USAGE) 0x0032) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_TEMPERATURE ((USAGE) 0x0033) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_WIND_DIRECTION ((USAGE) 0x0034) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_WIND_SPEED ((USAGE) 0x0035) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_AIR_QUALITY ((USAGE) 0x0036) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_HEAT_INDEX ((USAGE) 0x0037) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_SURFACE_TEMPERATURE ((USAGE) 0x0038) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_VOLATILE_ORGANIC_COMPOUNDS ((USAGE) 0x0039) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_OBJECT_PRESENCE ((USAGE) 0x003A) +#define HID_USAGE_SENSORS_ENVIRONMENTAL_OBJECT_PROXIMITY ((USAGE) 0x003B) +#define HID_USAGE_SENSORS_LIGHT ((USAGE) 0x0040) +#define HID_USAGE_SENSORS_LIGHT_AMBIENT_LIGHT ((USAGE) 0x0041) +#define HID_USAGE_SENSORS_LIGHT_CONSUMER_INFRARED ((USAGE) 0x0042) +#define HID_USAGE_SENSORS_LIGHT_INFRARED_LIGHT ((USAGE) 0x0043) +#define HID_USAGE_SENSORS_LIGHT_VISIBLE_LIGHT ((USAGE) 0x0044) +#define HID_USAGE_SENSORS_LIGHT_ULTRAVIOLET_LIGHT ((USAGE) 0x0045) +#define HID_USAGE_SENSORS_LOCATION ((USAGE) 0x0050) +#define HID_USAGE_SENSORS_LOCATION_BROADCAST ((USAGE) 0x0051) +#define HID_USAGE_SENSORS_LOCATION_DEAD_RECKONING ((USAGE) 0x0052) +#define HID_USAGE_SENSORS_LOCATION_GPS_GLOBAL_POSITIONING_SYSTEM ((USAGE) 0x0053) +#define HID_USAGE_SENSORS_LOCATION_LOOKUP ((USAGE) 0x0054) +#define HID_USAGE_SENSORS_LOCATION_OTHER ((USAGE) 0x0055) +#define HID_USAGE_SENSORS_LOCATION_STATIC ((USAGE) 0x0056) +#define HID_USAGE_SENSORS_LOCATION_TRIANGULATION ((USAGE) 0x0057) +#define HID_USAGE_SENSORS_MECHANICAL ((USAGE) 0x0060) +#define HID_USAGE_SENSORS_MECHANICAL_BOOLEAN_SWITCH ((USAGE) 0x0061) +#define HID_USAGE_SENSORS_MECHANICAL_BOOLEAN_SWITCH_ARRAY ((USAGE) 0x0062) +#define HID_USAGE_SENSORS_MECHANICAL_MULTIVALUE_SWITCH ((USAGE) 0x0063) +#define HID_USAGE_SENSORS_MECHANICAL_FORCE ((USAGE) 0x0064) +#define HID_USAGE_SENSORS_MECHANICAL_PRESSURE ((USAGE) 0x0065) +#define HID_USAGE_SENSORS_MECHANICAL_STRAIN ((USAGE) 0x0066) +#define HID_USAGE_SENSORS_MECHANICAL_WEIGHT ((USAGE) 0x0067) +#define HID_USAGE_SENSORS_MECHANICAL_HAPTIC_VIBRATOR ((USAGE) 0x0068) +#define HID_USAGE_SENSORS_MECHANICAL_HALL_EFFECT_SWITCH ((USAGE) 0x0069) +#define HID_USAGE_SENSORS_MOTION ((USAGE) 0x0070) +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER_1D ((USAGE) 0x0071) +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER_2D ((USAGE) 0x0072) +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER_3D ((USAGE) 0x0073) +#define HID_USAGE_SENSORS_MOTION_GYROMETER_1D ((USAGE) 0x0074) +#define HID_USAGE_SENSORS_MOTION_GYROMETER_2D ((USAGE) 0x0075) +#define HID_USAGE_SENSORS_MOTION_GYROMETER_3D ((USAGE) 0x0076) +#define HID_USAGE_SENSORS_MOTION_MOTION_DETECTOR ((USAGE) 0x0077) +#define HID_USAGE_SENSORS_MOTION_SPEEDOMETER ((USAGE) 0x0078) +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER ((USAGE) 0x0079) +#define HID_USAGE_SENSORS_MOTION_GYROMETER ((USAGE) 0x007A) +#define HID_USAGE_SENSORS_MOTION_GRAVITY_VECTOR ((USAGE) 0x007B) +#define HID_USAGE_SENSORS_MOTION_LINEAR_ACCELEROMETER ((USAGE) 0x007C) +#define HID_USAGE_SENSORS_ORIENTATION ((USAGE) 0x0080) +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS_1D ((USAGE) 0x0081) +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS_2D ((USAGE) 0x0082) +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS_3D ((USAGE) 0x0083) +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER_1D ((USAGE) 0x0084) +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER_2D ((USAGE) 0x0085) +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER_3D ((USAGE) 0x0086) +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE_1D ((USAGE) 0x0087) +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE_2D ((USAGE) 0x0088) +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE_3D ((USAGE) 0x0089) +#define HID_USAGE_SENSORS_ORIENTATION_DEVICE_ORIENTATION ((USAGE) 0x008A) +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS ((USAGE) 0x008B) +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER ((USAGE) 0x008C) +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE ((USAGE) 0x008D) +#define HID_USAGE_SENSORS_ORIENTATION_RELATIVE_ORIENTATION ((USAGE) 0x008E) +#define HID_USAGE_SENSORS_ORIENTATION_SIMPLE_ORIENTATION ((USAGE) 0x008F) +#define HID_USAGE_SENSORS_SCANNER ((USAGE) 0x0090) +#define HID_USAGE_SENSORS_SCANNER_BARCODE ((USAGE) 0x0091) +#define HID_USAGE_SENSORS_SCANNER_RFID ((USAGE) 0x0092) +#define HID_USAGE_SENSORS_SCANNER_NFC ((USAGE) 0x0093) +#define HID_USAGE_SENSORS_TIME ((USAGE) 0x00A0) +#define HID_USAGE_SENSORS_TIME_ALARM_TIMER ((USAGE) 0x00A1) +#define HID_USAGE_SENSORS_TIME_REAL_TIME_CLOCK ((USAGE) 0x00A2) +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY ((USAGE) 0x00B0) +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_ACTIVITY_DETECTION ((USAGE) 0x00B1) +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_DEVICE_POSITION ((USAGE) 0x00B2) +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_FLOOR_TRACKER ((USAGE) 0x00B3) +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_PEDOMETER ((USAGE) 0x00B4) +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_STEP_DETECTION ((USAGE) 0x00B5) +#define HID_USAGE_SENSORS_ORIENTATION_EXTENDED ((USAGE) 0x00C0) +#define HID_USAGE_SENSORS_ORIENTATION_EXTENDED_GEOMAGNETIC_ORIENTATION ((USAGE) 0x00C1) +#define HID_USAGE_SENSORS_ORIENTATION_EXTENDED_MAGNETOMETER ((USAGE) 0x00C2) +#define HID_USAGE_SENSORS_GESTURE ((USAGE) 0x00D0) +#define HID_USAGE_SENSORS_GESTURE_CHASSIS_FLIP_GESTURE ((USAGE) 0x00D1) +#define HID_USAGE_SENSORS_GESTURE_HINGE_FOLD_GESTURE ((USAGE) 0x00D2) +#define HID_USAGE_SENSORS_OTHER ((USAGE) 0x00E0) +#define HID_USAGE_SENSORS_OTHER_CUSTOM ((USAGE) 0x00E1) +#define HID_USAGE_SENSORS_OTHER_GENERIC ((USAGE) 0x00E2) +#define HID_USAGE_SENSORS_OTHER_GENERIC_ENUMERATOR ((USAGE) 0x00E3) +#define HID_USAGE_SENSORS_OTHER_HINGE_ANGLE ((USAGE) 0x00E4) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_1 ((USAGE) 0x00F0) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_2 ((USAGE) 0x00F1) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_3 ((USAGE) 0x00F2) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_4 ((USAGE) 0x00F3) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_5 ((USAGE) 0x00F4) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_6 ((USAGE) 0x00F5) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_7 ((USAGE) 0x00F6) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_8 ((USAGE) 0x00F7) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_9 ((USAGE) 0x00F8) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_10 ((USAGE) 0x00F9) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_11 ((USAGE) 0x00FA) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_12 ((USAGE) 0x00FB) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_13 ((USAGE) 0x00FC) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_14 ((USAGE) 0x00FD) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_15 ((USAGE) 0x00FE) +#define HID_USAGE_SENSORS_VENDOR_RESERVED_16 ((USAGE) 0x00FF) +#define HID_USAGE_SENSORS_EVENT ((USAGE) 0x0200) +#define HID_USAGE_SENSORS_EVENT_SENSOR_STATE ((USAGE) 0x0201) +#define HID_USAGE_SENSORS_EVENT_SENSOR_EVENT ((USAGE) 0x0202) +#define HID_USAGE_SENSORS_PROPERTY ((USAGE) 0x0300) +#define HID_USAGE_SENSORS_PROPERTY_FRIENDLY_NAME ((USAGE) 0x0301) +#define HID_USAGE_SENSORS_PROPERTY_PERSISTENT_UNIQUE_ID ((USAGE) 0x0302) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_STATUS ((USAGE) 0x0303) +#define HID_USAGE_SENSORS_PROPERTY_MINIMUM_REPORT_INTERVAL ((USAGE) 0x0304) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_MANUFACTURER ((USAGE) 0x0305) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_MODEL ((USAGE) 0x0306) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_SERIAL_NUMBER ((USAGE) 0x0307) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_DESCRIPTION ((USAGE) 0x0308) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_CONNECTION_TYPE ((USAGE) 0x0309) +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_DEVICE_PATH ((USAGE) 0x030A) +#define HID_USAGE_SENSORS_PROPERTY_HARDWARE_REVISION ((USAGE) 0x030B) +#define HID_USAGE_SENSORS_PROPERTY_FIRMWARE_VERSION ((USAGE) 0x030C) +#define HID_USAGE_SENSORS_PROPERTY_RELEASE_DATE ((USAGE) 0x030D) +#define HID_USAGE_SENSORS_PROPERTY_REPORT_INTERVAL ((USAGE) 0x030E) +#define HID_USAGE_SENSORS_PROPERTY_CHANGE_SENSITIVITY_ABSOLUTE ((USAGE) 0x030F) +#define HID_USAGE_SENSORS_PROPERTY_CHANGE_SENSITIVITY_PERCENT_OF_RANGE ((USAGE) 0x0310) +#define HID_USAGE_SENSORS_PROPERTY_CHANGE_SENSITIVITY_PERCENT_RELATIVE ((USAGE) 0x0311) +#define HID_USAGE_SENSORS_PROPERTY_ACCURACY ((USAGE) 0x0312) +#define HID_USAGE_SENSORS_PROPERTY_RESOLUTION ((USAGE) 0x0313) +#define HID_USAGE_SENSORS_PROPERTY_MAXIMUM ((USAGE) 0x0314) +#define HID_USAGE_SENSORS_PROPERTY_MINIMUM ((USAGE) 0x0315) +#define HID_USAGE_SENSORS_PROPERTY_REPORTING_STATE ((USAGE) 0x0316) +#define HID_USAGE_SENSORS_PROPERTY_SAMPLING_RATE ((USAGE) 0x0317) +#define HID_USAGE_SENSORS_PROPERTY_RESPONSE_CURVE ((USAGE) 0x0318) +#define HID_USAGE_SENSORS_PROPERTY_POWER_STATE ((USAGE) 0x0319) +#define HID_USAGE_SENSORS_PROPERTY_MAXIMUM_FIFO_EVENTS ((USAGE) 0x031A) +#define HID_USAGE_SENSORS_PROPERTY_REPORT_LATENCY ((USAGE) 0x031B) +#define HID_USAGE_SENSORS_PROPERTY_FLUSH_FIFO_EVENTS ((USAGE) 0x031C) +#define HID_USAGE_SENSORS_PROPERTY_MAXIMUM_POWER_CONSUMPTION ((USAGE) 0x031D) +#define HID_USAGE_SENSORS_PROPERTY_IS_PRIMARY ((USAGE) 0x031E) +#define HID_USAGE_SENSORS_PROPERTY_HUMAN_PRESENCE_DETECTION_TYPE ((USAGE) 0x031F) +#define HID_USAGE_SENSORS_DATA_FIELD_LOCATION ((USAGE) 0x0400) +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_ANTENNA_SEA_LEVEL ((USAGE) 0x0402) +#define HID_USAGE_SENSORS_DATA_FIELD_DIFFERENTIAL_REFERENCE_STATION_ID ((USAGE) 0x0403) +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_ELLIPSOID_ERROR ((USAGE) 0x0404) +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_ELLIPSOID ((USAGE) 0x0405) +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_SEA_LEVEL_ERROR ((USAGE) 0x0406) +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_SEA_LEVEL ((USAGE) 0x0407) +#define HID_USAGE_SENSORS_DATA_FIELD_DIFFERENTIAL_GPS_DATA_AGE ((USAGE) 0x0408) +#define HID_USAGE_SENSORS_DATA_FIELD_ERROR_RADIUS ((USAGE) 0x0409) +#define HID_USAGE_SENSORS_DATA_FIELD_FIX_QUALITY ((USAGE) 0x040A) +#define HID_USAGE_SENSORS_DATA_FIELD_FIX_TYPE ((USAGE) 0x040B) +#define HID_USAGE_SENSORS_DATA_FIELD_GEOIDAL_SEPARATION ((USAGE) 0x040C) +#define HID_USAGE_SENSORS_DATA_FIELD_GPS_OPERATION_MODE ((USAGE) 0x040D) +#define HID_USAGE_SENSORS_DATA_FIELD_GPS_SELECTION_MODE ((USAGE) 0x040E) +#define HID_USAGE_SENSORS_DATA_FIELD_GPS_STATUS ((USAGE) 0x040F) +#define HID_USAGE_SENSORS_DATA_FIELD_POSITION_DILUTION_OF_PRECISION ((USAGE) 0x0410) +#define HID_USAGE_SENSORS_DATA_FIELD_HORIZONTAL_DILUTION_OF_PRECISION ((USAGE) 0x0411) +#define HID_USAGE_SENSORS_DATA_FIELD_VERTICAL_DILUTION_OF_PRECISION ((USAGE) 0x0412) +#define HID_USAGE_SENSORS_DATA_FIELD_LATITUDE ((USAGE) 0x0413) +#define HID_USAGE_SENSORS_DATA_FIELD_LONGITUDE ((USAGE) 0x0414) +#define HID_USAGE_SENSORS_DATA_FIELD_TRUE_HEADING ((USAGE) 0x0415) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_HEADING ((USAGE) 0x0416) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_VARIATION ((USAGE) 0x0417) +#define HID_USAGE_SENSORS_DATA_FIELD_SPEED ((USAGE) 0x0418) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW ((USAGE) 0x0419) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_AZIMUTH ((USAGE) 0x041A) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_ELEVATION ((USAGE) 0x041B) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_IDS ((USAGE) 0x041C) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_PRNS ((USAGE) 0x041D) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_SN_RATIOS ((USAGE) 0x041E) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_USED_COUNT ((USAGE) 0x041F) +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_USED_PRNS ((USAGE) 0x0420) +#define HID_USAGE_SENSORS_DATA_FIELD_NMEA_SENTENCE ((USAGE) 0x0421) +#define HID_USAGE_SENSORS_DATA_FIELD_ADDRESS_LINE_1 ((USAGE) 0x0422) +#define HID_USAGE_SENSORS_DATA_FIELD_ADDRESS_LINE_2 ((USAGE) 0x0423) +#define HID_USAGE_SENSORS_DATA_FIELD_CITY ((USAGE) 0x0424) +#define HID_USAGE_SENSORS_DATA_FIELD_STATE_OR_PROVINCE ((USAGE) 0x0425) +#define HID_USAGE_SENSORS_DATA_FIELD_COUNTRY_OR_REGION ((USAGE) 0x0426) +#define HID_USAGE_SENSORS_DATA_FIELD_POSTAL_CODE ((USAGE) 0x0427) +#define HID_USAGE_SENSORS_PROPERTY_LOCATION ((USAGE) 0x042A) +#define HID_USAGE_SENSORS_PROPERTY_LOCATION_DESIRED_ACCURACY ((USAGE) 0x042B) +#define HID_USAGE_SENSORS_DATA_FIELD_ENVIRONMENTAL ((USAGE) 0x0430) +#define HID_USAGE_SENSORS_DATA_FIELD_ATMOSPHERIC_PRESSURE ((USAGE) 0x0431) +#define HID_USAGE_SENSORS_DATA_FIELD_RELATIVE_HUMIDITY ((USAGE) 0x0433) +#define HID_USAGE_SENSORS_DATA_FIELD_TEMPERATURE ((USAGE) 0x0434) +#define HID_USAGE_SENSORS_DATA_FIELD_WIND_DIRECTION ((USAGE) 0x0435) +#define HID_USAGE_SENSORS_DATA_FIELD_WIND_SPEED ((USAGE) 0x0436) +#define HID_USAGE_SENSORS_DATA_FIELD_AIR_QUALITY_INDEX ((USAGE) 0x0437) +#define HID_USAGE_SENSORS_DATA_FIELD_EQUIVALENT_CO2 ((USAGE) 0x0438) +#define HID_USAGE_SENSORS_DATA_FIELD_VOLATILE_ORGANIC_COMPOUND_CONCENTRATION ((USAGE) 0x0439) +#define HID_USAGE_SENSORS_DATA_FIELD_OBJECT_PRESENCE ((USAGE) 0x043A) +#define HID_USAGE_SENSORS_DATA_FIELD_OBJECT_PROXIMITY_RANGE ((USAGE) 0x043B) +#define HID_USAGE_SENSORS_DATA_FIELD_OBJECT_PROXIMITY_OUT_OF_RANGE ((USAGE) 0x043C) +#define HID_USAGE_SENSORS_PROPERTY_ENVIRONMENTAL ((USAGE) 0x0440) +#define HID_USAGE_SENSORS_PROPERTY_REFERENCE_PRESSURE ((USAGE) 0x0441) +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION ((USAGE) 0x0450) +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION_STATE ((USAGE) 0x0451) +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION ((USAGE) 0x0452) +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION_AXIS_X ((USAGE) 0x0453) +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION_AXIS_Y ((USAGE) 0x0454) +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION_AXIS_Z ((USAGE) 0x0455) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY ((USAGE) 0x0456) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY_ABOUT_X_AXIS ((USAGE) 0x0457) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY_ABOUT_Y_AXIS ((USAGE) 0x0458) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY_ABOUT_Z_AXIS ((USAGE) 0x0459) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION ((USAGE) 0x045A) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION_ABOUT_X_AXIS ((USAGE) 0x045B) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION_ABOUT_Y_AXIS ((USAGE) 0x045C) +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION_ABOUT_Z_AXIS ((USAGE) 0x045D) +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION_SPEED ((USAGE) 0x045E) +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION_INTENSITY ((USAGE) 0x045F) +#define HID_USAGE_SENSORS_DATA_FIELD_ORIENTATION ((USAGE) 0x0470) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING ((USAGE) 0x0471) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_X_AXIS ((USAGE) 0x0472) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_Y_AXIS ((USAGE) 0x0473) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_Z_AXIS ((USAGE) 0x0474) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_COMPENSATED_MAGNETIC_NORTH ((USAGE) 0x0475) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_COMPENSATED_TRUE_NORTH ((USAGE) 0x0476) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_MAGNETIC_NORTH ((USAGE) 0x0477) +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_TRUE_NORTH ((USAGE) 0x0478) +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE ((USAGE) 0x0479) +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_X_AXIS ((USAGE) 0x047A) +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_Y_AXIS ((USAGE) 0x047B) +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_Z_AXIS ((USAGE) 0x047C) +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_OUTOFRANGE ((USAGE) 0x047D) +#define HID_USAGE_SENSORS_DATA_FIELD_TILT ((USAGE) 0x047E) +#define HID_USAGE_SENSORS_DATA_FIELD_TILT_X_AXIS ((USAGE) 0x047F) +#define HID_USAGE_SENSORS_DATA_FIELD_TILT_Y_AXIS ((USAGE) 0x0480) +#define HID_USAGE_SENSORS_DATA_FIELD_TILT_Z_AXIS ((USAGE) 0x0481) +#define HID_USAGE_SENSORS_DATA_FIELD_ROTATION_MATRIX ((USAGE) 0x0482) +#define HID_USAGE_SENSORS_DATA_FIELD_QUATERNION ((USAGE) 0x0483) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX ((USAGE) 0x0484) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX_X_AXIS ((USAGE) 0x0485) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX_Y_AXIS ((USAGE) 0x0486) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX_Z_AXIS ((USAGE) 0x0487) +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETOMETER_ACCURACY ((USAGE) 0x0488) +#define HID_USAGE_SENSORS_DATA_FIELD_SIMPLE_ORIENTATION_DIRECTION ((USAGE) 0x0489) +#define HID_USAGE_SENSORS_DATA_FIELD_MECHANICAL ((USAGE) 0x0490) +#define HID_USAGE_SENSORS_DATA_FIELD_BOOLEAN_SWITCH_STATE ((USAGE) 0x0491) +#define HID_USAGE_SENSORS_DATA_FIELD_BOOLEAN_SWITCH_ARRAY_STATES ((USAGE) 0x0492) +#define HID_USAGE_SENSORS_DATA_FIELD_MULTIVALUE_SWITCH_VALUE ((USAGE) 0x0493) +#define HID_USAGE_SENSORS_DATA_FIELD_FORCE ((USAGE) 0x0494) +#define HID_USAGE_SENSORS_DATA_FIELD_ABSOLUTE_PRESSURE ((USAGE) 0x0495) +#define HID_USAGE_SENSORS_DATA_FIELD_GAUGE_PRESSURE ((USAGE) 0x0496) +#define HID_USAGE_SENSORS_DATA_FIELD_STRAIN ((USAGE) 0x0497) +#define HID_USAGE_SENSORS_DATA_FIELD_WEIGHT ((USAGE) 0x0498) +#define HID_USAGE_SENSORS_PROPERTY_MECHANICAL ((USAGE) 0x04A0) +#define HID_USAGE_SENSORS_PROPERTY_VIBRATION_STATE ((USAGE) 0x04A1) +#define HID_USAGE_SENSORS_PROPERTY_FORWARD_VIBRATION_SPEED ((USAGE) 0x04A2) +#define HID_USAGE_SENSORS_PROPERTY_BACKWARD_VIBRATION_SPEED ((USAGE) 0x04A3) +#define HID_USAGE_SENSORS_DATA_FIELD_BIOMETRIC ((USAGE) 0x04B0) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_PRESENCE ((USAGE) 0x04B1) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_PROXIMITY_RANGE ((USAGE) 0x04B2) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_PROXIMITY_OUT_OF_RANGE ((USAGE) 0x04B3) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_TOUCH_STATE ((USAGE) 0x04B4) +#define HID_USAGE_SENSORS_DATA_FIELD_BLOOD_PRESSURE ((USAGE) 0x04B5) +#define HID_USAGE_SENSORS_DATA_FIELD_BLOOD_PRESSURE_DIASTOLIC ((USAGE) 0x04B6) +#define HID_USAGE_SENSORS_DATA_FIELD_BLOOD_PRESSURE_SYSTOLIC ((USAGE) 0x04B7) +#define HID_USAGE_SENSORS_DATA_FIELD_HEART_RATE ((USAGE) 0x04B8) +#define HID_USAGE_SENSORS_DATA_FIELD_RESTING_HEART_RATE ((USAGE) 0x04B9) +#define HID_USAGE_SENSORS_DATA_FIELD_HEARTBEAT_INTERVAL ((USAGE) 0x04BA) +#define HID_USAGE_SENSORS_DATA_FIELD_RESPIRATORY_RATE ((USAGE) 0x04BB) +#define HID_USAGE_SENSORS_DATA_FIELD_SPO2 ((USAGE) 0x04BC) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_ATTENTION_DETECTED ((USAGE) 0x04BD) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_HEAD_AZIMUTH ((USAGE) 0x04BE) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_HEAD_ALTITUDE ((USAGE) 0x04BF) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_HEAD_ROLL ((USAGE) 0x04C0) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_HEAD_PITCH ((USAGE) 0x04C1) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_HEAD_YAW ((USAGE) 0x04C2) +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_CORRELATION_ID ((USAGE) 0x04C3) +#define HID_USAGE_SENSORS_DATA_FIELD_LIGHT ((USAGE) 0x04D0) +#define HID_USAGE_SENSORS_DATA_FIELD_ILLUMINANCE ((USAGE) 0x04D1) +#define HID_USAGE_SENSORS_DATA_FIELD_COLOR_TEMPERATURE ((USAGE) 0x04D2) +#define HID_USAGE_SENSORS_DATA_FIELD_CHROMATICITY ((USAGE) 0x04D3) +#define HID_USAGE_SENSORS_DATA_FIELD_CHROMATICITY_X ((USAGE) 0x04D4) +#define HID_USAGE_SENSORS_DATA_FIELD_CHROMATICITY_Y ((USAGE) 0x04D5) +#define HID_USAGE_SENSORS_DATA_FIELD_CONSUMER_IR_SENTENCE_RECEIVE ((USAGE) 0x04D6) +#define HID_USAGE_SENSORS_DATA_FIELD_INFRARED_LIGHT ((USAGE) 0x04D7) +#define HID_USAGE_SENSORS_DATA_FIELD_RED_LIGHT ((USAGE) 0x04D8) +#define HID_USAGE_SENSORS_DATA_FIELD_GREEN_LIGHT ((USAGE) 0x04D9) +#define HID_USAGE_SENSORS_DATA_FIELD_BLUE_LIGHT ((USAGE) 0x04DA) +#define HID_USAGE_SENSORS_DATA_FIELD_ULTRAVIOLET_A_LIGHT ((USAGE) 0x04DB) +#define HID_USAGE_SENSORS_DATA_FIELD_ULTRAVIOLET_B_LIGHT ((USAGE) 0x04DC) +#define HID_USAGE_SENSORS_DATA_FIELD_ULTRAVIOLET_INDEX ((USAGE) 0x04DD) +#define HID_USAGE_SENSORS_DATA_FIELD_NEAR_INFRARED_LIGHT ((USAGE) 0x04DE) +#define HID_USAGE_SENSORS_PROPERTY_LIGHT ((USAGE) 0x04DF) +#define HID_USAGE_SENSORS_PROPERTY_CONSUMER_IR_SENTENCE_SEND ((USAGE) 0x04E0) +#define HID_USAGE_SENSORS_PROPERTY_AUTO_BRIGHTNESS_PREFERRED ((USAGE) 0x04E2) +#define HID_USAGE_SENSORS_PROPERTY_AUTO_COLOR_PREFERRED ((USAGE) 0x04E3) +#define HID_USAGE_SENSORS_DATA_FIELD_SCANNER ((USAGE) 0x04F0) +#define HID_USAGE_SENSORS_DATA_FIELD_RFID_TAG_40_BIT ((USAGE) 0x04F1) +#define HID_USAGE_SENSORS_DATA_FIELD_NFC_SENTENCE_RECEIVE ((USAGE) 0x04F2) +#define HID_USAGE_SENSORS_PROPERTY_SCANNER ((USAGE) 0x04F8) +#define HID_USAGE_SENSORS_PROPERTY_NFC_SENTENCE_SEND ((USAGE) 0x04F9) +#define HID_USAGE_SENSORS_DATA_FIELD_ELECTRICAL ((USAGE) 0x0500) +#define HID_USAGE_SENSORS_DATA_FIELD_CAPACITANCE ((USAGE) 0x0501) +#define HID_USAGE_SENSORS_DATA_FIELD_CURRENT ((USAGE) 0x0502) +#define HID_USAGE_SENSORS_DATA_FIELD_ELECTRICAL_POWER ((USAGE) 0x0503) +#define HID_USAGE_SENSORS_DATA_FIELD_INDUCTANCE ((USAGE) 0x0504) +#define HID_USAGE_SENSORS_DATA_FIELD_RESISTANCE ((USAGE) 0x0505) +#define HID_USAGE_SENSORS_DATA_FIELD_VOLTAGE ((USAGE) 0x0506) +#define HID_USAGE_SENSORS_DATA_FIELD_FREQUENCY ((USAGE) 0x0507) +#define HID_USAGE_SENSORS_DATA_FIELD_PERIOD ((USAGE) 0x0508) +#define HID_USAGE_SENSORS_DATA_FIELD_PERCENT_OF_RANGE ((USAGE) 0x0509) +#define HID_USAGE_SENSORS_DATA_FIELD_TIME ((USAGE) 0x0520) +#define HID_USAGE_SENSORS_DATA_FIELD_YEAR ((USAGE) 0x0521) +#define HID_USAGE_SENSORS_DATA_FIELD_MONTH ((USAGE) 0x0522) +#define HID_USAGE_SENSORS_DATA_FIELD_DAY ((USAGE) 0x0523) +#define HID_USAGE_SENSORS_DATA_FIELD_DAY_OF_WEEK ((USAGE) 0x0524) +#define HID_USAGE_SENSORS_DATA_FIELD_HOUR ((USAGE) 0x0525) +#define HID_USAGE_SENSORS_DATA_FIELD_MINUTE ((USAGE) 0x0526) +#define HID_USAGE_SENSORS_DATA_FIELD_SECOND ((USAGE) 0x0527) +#define HID_USAGE_SENSORS_DATA_FIELD_MILLISECOND ((USAGE) 0x0528) +#define HID_USAGE_SENSORS_DATA_FIELD_TIMESTAMP ((USAGE) 0x0529) +#define HID_USAGE_SENSORS_DATA_FIELD_JULIAN_DAY_OF_YEAR ((USAGE) 0x052A) +#define HID_USAGE_SENSORS_DATA_FIELD_TIME_SINCE_SYSTEM_BOOT ((USAGE) 0x052B) +#define HID_USAGE_SENSORS_PROPERTY_TIME ((USAGE) 0x0530) +#define HID_USAGE_SENSORS_PROPERTY_TIME_ZONE_OFFSET_FROM_UTC ((USAGE) 0x0531) +#define HID_USAGE_SENSORS_PROPERTY_TIME_ZONE_NAME ((USAGE) 0x0532) +#define HID_USAGE_SENSORS_PROPERTY_DAYLIGHT_SAVINGS_TIME_OBSERVED ((USAGE) 0x0533) +#define HID_USAGE_SENSORS_PROPERTY_TIME_TRIM_ADJUSTMENT ((USAGE) 0x0534) +#define HID_USAGE_SENSORS_PROPERTY_ARM_ALARM ((USAGE) 0x0535) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM ((USAGE) 0x0540) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_USAGE ((USAGE) 0x0541) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_BOOLEAN_ARRAY ((USAGE) 0x0542) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE ((USAGE) 0x0543) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_1 ((USAGE) 0x0544) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_2 ((USAGE) 0x0545) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_3 ((USAGE) 0x0546) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_4 ((USAGE) 0x0547) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_5 ((USAGE) 0x0548) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_6 ((USAGE) 0x0549) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_7 ((USAGE) 0x054A) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_8 ((USAGE) 0x054B) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_9 ((USAGE) 0x054C) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_10 ((USAGE) 0x054D) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_11 ((USAGE) 0x054E) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_12 ((USAGE) 0x054F) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_13 ((USAGE) 0x0550) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_14 ((USAGE) 0x0551) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_15 ((USAGE) 0x0552) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_16 ((USAGE) 0x0553) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_17 ((USAGE) 0x0554) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_18 ((USAGE) 0x0555) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_19 ((USAGE) 0x0556) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_20 ((USAGE) 0x0557) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_21 ((USAGE) 0x0558) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_22 ((USAGE) 0x0559) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_23 ((USAGE) 0x055A) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_24 ((USAGE) 0x055B) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_25 ((USAGE) 0x055C) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_26 ((USAGE) 0x055D) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_27 ((USAGE) 0x055E) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_28 ((USAGE) 0x055F) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC ((USAGE) 0x0560) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_GUID_OR_PROPERTYKEY ((USAGE) 0x0561) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_CATEGORY_GUID ((USAGE) 0x0562) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_TYPE_GUID ((USAGE) 0x0563) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_EVENT_PROPERTYKEY ((USAGE) 0x0564) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_PROPERTY_PROPERTYKEY ((USAGE) 0x0565) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_DATA_FIELD_PROPERTYKEY ((USAGE) 0x0566) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_EVENT ((USAGE) 0x0567) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_PROPERTY ((USAGE) 0x0568) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_DATA_FIELD ((USAGE) 0x0569) +#define HID_USAGE_SENSORS_DATA_FIELD_ENUMERATOR_TABLE_ROW_INDEX ((USAGE) 0x056A) +#define HID_USAGE_SENSORS_DATA_FIELD_ENUMERATOR_TABLE_ROW_COUNT ((USAGE) 0x056B) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_GUID_OR_PROPERTYKEY_KIND ((USAGE) 0x056C) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_GUID ((USAGE) 0x056D) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_PROPERTYKEY ((USAGE) 0x056E) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_TOP_LEVEL_COLLECTION_ID ((USAGE) 0x056F) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_ID ((USAGE) 0x0570) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_ITEM_POSITION_INDEX ((USAGE) 0x0571) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_FIRMWARE_VARTYPE ((USAGE) 0x0572) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_UNIT_OF_MEASURE ((USAGE) 0x0573) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_UNIT_EXPONENT ((USAGE) 0x0574) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_SIZE ((USAGE) 0x0575) +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_COUNT ((USAGE) 0x0576) +#define HID_USAGE_SENSORS_PROPERTY_GENERIC ((USAGE) 0x0580) +#define HID_USAGE_SENSORS_PROPERTY_ENUMERATOR_TABLE_ROW_INDEX ((USAGE) 0x0581) +#define HID_USAGE_SENSORS_PROPERTY_ENUMERATOR_TABLE_ROW_COUNT ((USAGE) 0x0582) +#define HID_USAGE_SENSORS_DATA_FIELD_PERSONAL_ACTIVITY ((USAGE) 0x0590) +#define HID_USAGE_SENSORS_DATA_FIELD_ACTIVITY_TYPE ((USAGE) 0x0591) +#define HID_USAGE_SENSORS_DATA_FIELD_ACTIVITY_STATE ((USAGE) 0x0592) +#define HID_USAGE_SENSORS_DATA_FIELD_DEVICE_POSITION ((USAGE) 0x0593) +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_COUNT ((USAGE) 0x0594) +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_COUNT_RESET ((USAGE) 0x0595) +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_DURATION ((USAGE) 0x0596) +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_TYPE ((USAGE) 0x0597) +#define HID_USAGE_SENSORS_PROPERTY_MINIMUM_ACTIVITY_DETECTION_INTERVAL ((USAGE) 0x05A0) +#define HID_USAGE_SENSORS_PROPERTY_SUPPORTED_ACTIVITY_TYPES ((USAGE) 0x05A1) +#define HID_USAGE_SENSORS_PROPERTY_SUBSCRIBED_ACTIVITY_TYPES ((USAGE) 0x05A2) +#define HID_USAGE_SENSORS_PROPERTY_SUPPORTED_STEP_TYPES ((USAGE) 0x05A3) +#define HID_USAGE_SENSORS_PROPERTY_SUBSCRIBED_STEP_TYPES ((USAGE) 0x05A4) +#define HID_USAGE_SENSORS_PROPERTY_FLOOR_HEIGHT ((USAGE) 0x05A5) +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_TYPE_ID ((USAGE) 0x05B0) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM ((USAGE) 0x05C0) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_1 ((USAGE) 0x05C1) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_2 ((USAGE) 0x05C2) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_3 ((USAGE) 0x05C3) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_4 ((USAGE) 0x05C4) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_5 ((USAGE) 0x05C5) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_6 ((USAGE) 0x05C6) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_7 ((USAGE) 0x05C7) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_8 ((USAGE) 0x05C8) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_9 ((USAGE) 0x05C9) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_10 ((USAGE) 0x05CA) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_11 ((USAGE) 0x05CB) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_12 ((USAGE) 0x05CC) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_13 ((USAGE) 0x05CD) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_14 ((USAGE) 0x05CE) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_15 ((USAGE) 0x05CF) +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_16 ((USAGE) 0x05D0) +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE ((USAGE) 0x05E0) +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_ANGLE ((USAGE) 0x05E1) +#define HID_USAGE_SENSORS_DATA_FIELD_GESTURE_SENSOR ((USAGE) 0x05F0) +#define HID_USAGE_SENSORS_DATA_FIELD_GESTURE_STATE ((USAGE) 0x05F1) +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_INITIAL_ANGLE ((USAGE) 0x05F2) +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_FINAL_ANGLE ((USAGE) 0x05F3) +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_CONTRIBUTING_PANEL ((USAGE) 0x05F4) +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_TYPE ((USAGE) 0x05F5) +#define HID_USAGE_SENSORS_SENSOR_STATE_UNDEFINED ((USAGE) 0x0800) +#define HID_USAGE_SENSORS_SENSOR_STATE_READY ((USAGE) 0x0801) +#define HID_USAGE_SENSORS_SENSOR_STATE_NOT_AVAILABLE ((USAGE) 0x0802) +#define HID_USAGE_SENSORS_SENSOR_STATE_NO_DATA ((USAGE) 0x0803) +#define HID_USAGE_SENSORS_SENSOR_STATE_INITIALIZING ((USAGE) 0x0804) +#define HID_USAGE_SENSORS_SENSOR_STATE_ACCESS_DENIED ((USAGE) 0x0805) +#define HID_USAGE_SENSORS_SENSOR_STATE_ERROR ((USAGE) 0x0806) +#define HID_USAGE_SENSORS_SENSOR_EVENT_UNKNOWN ((USAGE) 0x0810) +#define HID_USAGE_SENSORS_SENSOR_EVENT_STATE_CHANGED ((USAGE) 0x0811) +#define HID_USAGE_SENSORS_SENSOR_EVENT_PROPERTY_CHANGED ((USAGE) 0x0812) +#define HID_USAGE_SENSORS_SENSOR_EVENT_DATA_UPDATED ((USAGE) 0x0813) +#define HID_USAGE_SENSORS_SENSOR_EVENT_POLL_RESPONSE ((USAGE) 0x0814) +#define HID_USAGE_SENSORS_SENSOR_EVENT_CHANGE_SENSITIVITY ((USAGE) 0x0815) +#define HID_USAGE_SENSORS_SENSOR_EVENT_RANGE_MAXIMUM_REACHED ((USAGE) 0x0816) +#define HID_USAGE_SENSORS_SENSOR_EVENT_RANGE_MINIMUM_REACHED ((USAGE) 0x0817) +#define HID_USAGE_SENSORS_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_UPWARD ((USAGE) 0x0818) +#define HID_USAGE_SENSORS_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_DOWNWARD ((USAGE) 0x0819) +#define HID_USAGE_SENSORS_SENSOR_EVENT_LOW_THRESHOLD_CROSS_UPWARD ((USAGE) 0x081A) +#define HID_USAGE_SENSORS_SENSOR_EVENT_LOW_THRESHOLD_CROSS_DOWNWARD ((USAGE) 0x081B) +#define HID_USAGE_SENSORS_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_UPWARD ((USAGE) 0x081C) +#define HID_USAGE_SENSORS_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_DOWNWARD ((USAGE) 0x081D) +#define HID_USAGE_SENSORS_SENSOR_EVENT_PERIOD_EXCEEDED ((USAGE) 0x081E) +#define HID_USAGE_SENSORS_SENSOR_EVENT_FREQUENCY_EXCEEDED ((USAGE) 0x081F) +#define HID_USAGE_SENSORS_SENSOR_EVENT_COMPLEX_TRIGGER ((USAGE) 0x0820) +#define HID_USAGE_SENSORS_CONNECTION_TYPE_PC_INTEGRATED ((USAGE) 0x0830) +#define HID_USAGE_SENSORS_CONNECTION_TYPE_PC_ATTACHED ((USAGE) 0x0831) +#define HID_USAGE_SENSORS_CONNECTION_TYPE_PC_EXTERNAL ((USAGE) 0x0832) +#define HID_USAGE_SENSORS_REPORTING_STATE_REPORT_NO_EVENTS ((USAGE) 0x0840) +#define HID_USAGE_SENSORS_REPORTING_STATE_REPORT_ALL_EVENTS ((USAGE) 0x0841) +#define HID_USAGE_SENSORS_REPORTING_STATE_REPORT_THRESHOLD_EVENTS ((USAGE) 0x0842) +#define HID_USAGE_SENSORS_REPORTING_STATE_WAKE_ON_NO_EVENTS ((USAGE) 0x0843) +#define HID_USAGE_SENSORS_REPORTING_STATE_WAKE_ON_ALL_EVENTS ((USAGE) 0x0844) +#define HID_USAGE_SENSORS_REPORTING_STATE_WAKE_ON_THRESHOLD_EVENTS ((USAGE) 0x0845) +#define HID_USAGE_SENSORS_REPORTING_STATE_ANYTIME_SEL ((USAGE) 0x0846) +#define HID_USAGE_SENSORS_POWER_STATE_UNDEFINED ((USAGE) 0x0850) +#define HID_USAGE_SENSORS_POWER_STATE_D0_FULL_POWER ((USAGE) 0x0851) +#define HID_USAGE_SENSORS_POWER_STATE_D1_LOW_POWER ((USAGE) 0x0852) +#define HID_USAGE_SENSORS_POWER_STATE_D2_STANDBY_POWER_WITH_WAKEUP ((USAGE) 0x0853) +#define HID_USAGE_SENSORS_POWER_STATE_D3_SLEEP_WITH_WAKEUP ((USAGE) 0x0854) +#define HID_USAGE_SENSORS_POWER_STATE_D4_POWER_OFF ((USAGE) 0x0855) +#define HID_USAGE_SENSORS_ACCURACY_DEFAULT ((USAGE) 0x0860) +#define HID_USAGE_SENSORS_ACCURACY_HIGH ((USAGE) 0x0861) +#define HID_USAGE_SENSORS_ACCURACY_MEDIUM ((USAGE) 0x0862) +#define HID_USAGE_SENSORS_ACCURACY_LOW ((USAGE) 0x0863) +#define HID_USAGE_SENSORS_FIX_QUALITY_NO_FIX ((USAGE) 0x0870) +#define HID_USAGE_SENSORS_FIX_QUALITY_GPS ((USAGE) 0x0871) +#define HID_USAGE_SENSORS_FIX_QUALITY_DGPS ((USAGE) 0x0872) +#define HID_USAGE_SENSORS_FIX_TYPE_NO_FIX ((USAGE) 0x0880) +#define HID_USAGE_SENSORS_FIX_TYPE_GPS_SPS_MODE_FIX_VALID ((USAGE) 0x0881) +#define HID_USAGE_SENSORS_FIX_TYPE_DGPS_SPS_MODE_FIX_VALID ((USAGE) 0x0882) +#define HID_USAGE_SENSORS_FIX_TYPE_GPS_PPS_MODE_FIX_VALID ((USAGE) 0x0883) +#define HID_USAGE_SENSORS_FIX_TYPE_REAL_TIME_KINEMATIC ((USAGE) 0x0884) +#define HID_USAGE_SENSORS_FIX_TYPE_FLOAT_RTK ((USAGE) 0x0885) +#define HID_USAGE_SENSORS_FIX_TYPE_ESTIMATED_DEAD_RECKONED ((USAGE) 0x0886) +#define HID_USAGE_SENSORS_FIX_TYPE_MANUAL_INPUT_MODE ((USAGE) 0x0887) +#define HID_USAGE_SENSORS_FIX_TYPE_SIMULATOR_MODE ((USAGE) 0x0888) +#define HID_USAGE_SENSORS_GPS_OPERATION_MODE_MANUAL ((USAGE) 0x0890) +#define HID_USAGE_SENSORS_GPS_OPERATION_MODE_AUTOMATIC ((USAGE) 0x0891) +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_AUTONOMOUS ((USAGE) 0x08A0) +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_DGPS ((USAGE) 0x08A1) +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_ESTIMATED_DEAD_RECKONED ((USAGE) 0x08A2) +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_MANUAL_INPUT ((USAGE) 0x08A3) +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_SIMULATOR ((USAGE) 0x08A4) +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_DATA_NOT_VALID ((USAGE) 0x08A5) +#define HID_USAGE_SENSORS_GPS_STATUS_DATA_VALID ((USAGE) 0x08B0) +#define HID_USAGE_SENSORS_GPS_STATUS_DATA_NOT_VALID ((USAGE) 0x08B1) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_SUNDAY ((USAGE) 0x08C0) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_MONDAY ((USAGE) 0x08C1) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_TUESDAY ((USAGE) 0x08C2) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_WEDNESDAY ((USAGE) 0x08C3) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_THURSDAY ((USAGE) 0x08C4) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_FRIDAY ((USAGE) 0x08C5) +#define HID_USAGE_SENSORS_DAY_OF_WEEK_SATURDAY ((USAGE) 0x08C6) +#define HID_USAGE_SENSORS_KIND_CATEGORY ((USAGE) 0x08D0) +#define HID_USAGE_SENSORS_KIND_TYPE ((USAGE) 0x08D1) +#define HID_USAGE_SENSORS_KIND_EVENT ((USAGE) 0x08D2) +#define HID_USAGE_SENSORS_KIND_PROPERTY ((USAGE) 0x08D3) +#define HID_USAGE_SENSORS_KIND_DATA_FIELD ((USAGE) 0x08D4) +#define HID_USAGE_SENSORS_MAGNETOMETER_ACCURACY_LOW ((USAGE) 0x08E0) +#define HID_USAGE_SENSORS_MAGNETOMETER_ACCURACY_MEDIUM ((USAGE) 0x08E1) +#define HID_USAGE_SENSORS_MAGNETOMETER_ACCURACY_HIGH ((USAGE) 0x08E2) +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_NOT_ROTATED ((USAGE) 0x08F0) +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_ROTATED_90_DEGREES_CCW ((USAGE) 0x08F1) +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_ROTATED_180_DEGREES_CCW ((USAGE) 0x08F2) +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_ROTATED_270_DEGREES_CCW ((USAGE) 0x08F3) +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_FACE_UP ((USAGE) 0x08F4) +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_FACE_DOWN ((USAGE) 0x08F5) +#define HID_USAGE_SENSORS_VT_NULL ((USAGE) 0x0900) +#define HID_USAGE_SENSORS_VT_BOOL ((USAGE) 0x0901) +#define HID_USAGE_SENSORS_VT_UI1 ((USAGE) 0x0902) +#define HID_USAGE_SENSORS_VT_I1 ((USAGE) 0x0903) +#define HID_USAGE_SENSORS_VT_UI2 ((USAGE) 0x0904) +#define HID_USAGE_SENSORS_VT_I2 ((USAGE) 0x0905) +#define HID_USAGE_SENSORS_VT_UI4 ((USAGE) 0x0906) +#define HID_USAGE_SENSORS_VT_I4 ((USAGE) 0x0907) +#define HID_USAGE_SENSORS_VT_UI8 ((USAGE) 0x0908) +#define HID_USAGE_SENSORS_VT_I8 ((USAGE) 0x0909) +#define HID_USAGE_SENSORS_VT_R4 ((USAGE) 0x090A) +#define HID_USAGE_SENSORS_VT_R8 ((USAGE) 0x090B) +#define HID_USAGE_SENSORS_VT_WSTR ((USAGE) 0x090C) +#define HID_USAGE_SENSORS_VT_STR ((USAGE) 0x090D) +#define HID_USAGE_SENSORS_VT_CLSID ((USAGE) 0x090E) +#define HID_USAGE_SENSORS_VT_VECTOR_VT_UI1 ((USAGE) 0x090F) +#define HID_USAGE_SENSORS_VT_F16E0 ((USAGE) 0x0910) +#define HID_USAGE_SENSORS_VT_F16E1 ((USAGE) 0x0911) +#define HID_USAGE_SENSORS_VT_F16E2 ((USAGE) 0x0912) +#define HID_USAGE_SENSORS_VT_F16E3 ((USAGE) 0x0913) +#define HID_USAGE_SENSORS_VT_F16E4 ((USAGE) 0x0914) +#define HID_USAGE_SENSORS_VT_F16E5 ((USAGE) 0x0915) +#define HID_USAGE_SENSORS_VT_F16E6 ((USAGE) 0x0916) +#define HID_USAGE_SENSORS_VT_F16E7 ((USAGE) 0x0917) +#define HID_USAGE_SENSORS_VT_F16E8 ((USAGE) 0x0918) +#define HID_USAGE_SENSORS_VT_F16E9 ((USAGE) 0x0919) +#define HID_USAGE_SENSORS_VT_F16EA ((USAGE) 0x091A) +#define HID_USAGE_SENSORS_VT_F16EB ((USAGE) 0x091B) +#define HID_USAGE_SENSORS_VT_F16EC ((USAGE) 0x091C) +#define HID_USAGE_SENSORS_VT_F16ED ((USAGE) 0x091D) +#define HID_USAGE_SENSORS_VT_F16EE ((USAGE) 0x091E) +#define HID_USAGE_SENSORS_VT_F16EF ((USAGE) 0x091F) +#define HID_USAGE_SENSORS_VT_F32E0 ((USAGE) 0x0920) +#define HID_USAGE_SENSORS_VT_F32E1 ((USAGE) 0x0921) +#define HID_USAGE_SENSORS_VT_F32E2 ((USAGE) 0x0922) +#define HID_USAGE_SENSORS_VT_F32E3 ((USAGE) 0x0923) +#define HID_USAGE_SENSORS_VT_F32E4 ((USAGE) 0x0924) +#define HID_USAGE_SENSORS_VT_F32E5 ((USAGE) 0x0925) +#define HID_USAGE_SENSORS_VT_F32E6 ((USAGE) 0x0926) +#define HID_USAGE_SENSORS_VT_F32E7 ((USAGE) 0x0927) +#define HID_USAGE_SENSORS_VT_F32E8 ((USAGE) 0x0928) +#define HID_USAGE_SENSORS_VT_F32E9 ((USAGE) 0x0929) +#define HID_USAGE_SENSORS_VT_F32EA ((USAGE) 0x092A) +#define HID_USAGE_SENSORS_VT_F32EB ((USAGE) 0x092B) +#define HID_USAGE_SENSORS_VT_F32EC ((USAGE) 0x092C) +#define HID_USAGE_SENSORS_VT_F32ED ((USAGE) 0x092D) +#define HID_USAGE_SENSORS_VT_F32EE ((USAGE) 0x092E) +#define HID_USAGE_SENSORS_VT_F32EF ((USAGE) 0x092F) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_UNKNOWN ((USAGE) 0x0930) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_STATIONARY ((USAGE) 0x0931) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_FIDGETING ((USAGE) 0x0932) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_WALKING ((USAGE) 0x0933) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_RUNNING ((USAGE) 0x0934) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_IN_VEHICLE ((USAGE) 0x0935) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_BIKING ((USAGE) 0x0936) +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_IDLE ((USAGE) 0x0937) +#define HID_USAGE_SENSORS_UNIT_NOT_SPECIFIED ((USAGE) 0x0940) +#define HID_USAGE_SENSORS_UNIT_LUX ((USAGE) 0x0941) +#define HID_USAGE_SENSORS_UNIT_DEGREES_KELVIN ((USAGE) 0x0942) +#define HID_USAGE_SENSORS_UNIT_DEGREES_CELSIUS ((USAGE) 0x0943) +#define HID_USAGE_SENSORS_UNIT_PASCAL ((USAGE) 0x0944) +#define HID_USAGE_SENSORS_UNIT_NEWTON ((USAGE) 0x0945) +#define HID_USAGE_SENSORS_UNIT_METERSSECOND ((USAGE) 0x0946) +#define HID_USAGE_SENSORS_UNIT_KILOGRAM ((USAGE) 0x0947) +#define HID_USAGE_SENSORS_UNIT_METER ((USAGE) 0x0948) +#define HID_USAGE_SENSORS_UNIT_METERSSECONDSECOND ((USAGE) 0x0949) +#define HID_USAGE_SENSORS_UNIT_FARAD ((USAGE) 0x094A) +#define HID_USAGE_SENSORS_UNIT_AMPERE ((USAGE) 0x094B) +#define HID_USAGE_SENSORS_UNIT_WATT ((USAGE) 0x094C) +#define HID_USAGE_SENSORS_UNIT_HENRY ((USAGE) 0x094D) +#define HID_USAGE_SENSORS_UNIT_OHM ((USAGE) 0x094E) +#define HID_USAGE_SENSORS_UNIT_VOLT ((USAGE) 0x094F) +#define HID_USAGE_SENSORS_UNIT_HERTZ ((USAGE) 0x0950) +#define HID_USAGE_SENSORS_UNIT_BAR ((USAGE) 0x0951) +#define HID_USAGE_SENSORS_UNIT_DEGREES_ANTICLOCKWISE ((USAGE) 0x0952) +#define HID_USAGE_SENSORS_UNIT_DEGREES_CLOCKWISE ((USAGE) 0x0953) +#define HID_USAGE_SENSORS_UNIT_DEGREES ((USAGE) 0x0954) +#define HID_USAGE_SENSORS_UNIT_DEGREESSECOND ((USAGE) 0x0955) +#define HID_USAGE_SENSORS_UNIT_DEGREESSECONDSECOND ((USAGE) 0x0956) +#define HID_USAGE_SENSORS_UNIT_KNOT ((USAGE) 0x0957) +#define HID_USAGE_SENSORS_UNIT_PERCENT ((USAGE) 0x0958) +#define HID_USAGE_SENSORS_UNIT_SECOND ((USAGE) 0x0959) +#define HID_USAGE_SENSORS_UNIT_MILLISECOND ((USAGE) 0x095A) +#define HID_USAGE_SENSORS_UNIT_G ((USAGE) 0x095B) +#define HID_USAGE_SENSORS_UNIT_BYTES ((USAGE) 0x095C) +#define HID_USAGE_SENSORS_UNIT_MILLIGAUSS ((USAGE) 0x095D) +#define HID_USAGE_SENSORS_UNIT_BITS ((USAGE) 0x095E) +#define HID_USAGE_SENSORS_ACTIVITY_STATE_NO_STATE_CHANGE ((USAGE) 0x0960) +#define HID_USAGE_SENSORS_ACTIVITY_STATE_START_ACTIVITY ((USAGE) 0x0961) +#define HID_USAGE_SENSORS_ACTIVITY_STATE_END_ACTIVITY ((USAGE) 0x0962) +#define HID_USAGE_SENSORS_EXPONENT_0 ((USAGE) 0x0970) +#define HID_USAGE_SENSORS_EXPONENT_1 ((USAGE) 0x0971) +#define HID_USAGE_SENSORS_EXPONENT_2 ((USAGE) 0x0972) +#define HID_USAGE_SENSORS_EXPONENT_3 ((USAGE) 0x0973) +#define HID_USAGE_SENSORS_EXPONENT_4 ((USAGE) 0x0974) +#define HID_USAGE_SENSORS_EXPONENT_5 ((USAGE) 0x0975) +#define HID_USAGE_SENSORS_EXPONENT_6 ((USAGE) 0x0976) +#define HID_USAGE_SENSORS_EXPONENT_7 ((USAGE) 0x0977) +#define HID_USAGE_SENSORS_EXPONENT_8 ((USAGE) 0x0978) +#define HID_USAGE_SENSORS_EXPONENT_9 ((USAGE) 0x0979) +#define HID_USAGE_SENSORS_EXPONENT_A ((USAGE) 0x097A) +#define HID_USAGE_SENSORS_EXPONENT_B ((USAGE) 0x097B) +#define HID_USAGE_SENSORS_EXPONENT_C ((USAGE) 0x097C) +#define HID_USAGE_SENSORS_EXPONENT_D ((USAGE) 0x097D) +#define HID_USAGE_SENSORS_EXPONENT_E ((USAGE) 0x097E) +#define HID_USAGE_SENSORS_EXPONENT_F ((USAGE) 0x097F) +#define HID_USAGE_SENSORS_DEVICE_POSITION_UNKNOWN ((USAGE) 0x0980) +#define HID_USAGE_SENSORS_DEVICE_POSITION_UNCHANGED ((USAGE) 0x0981) +#define HID_USAGE_SENSORS_DEVICE_POSITION_ON_DESK ((USAGE) 0x0982) +#define HID_USAGE_SENSORS_DEVICE_POSITION_IN_HAND ((USAGE) 0x0983) +#define HID_USAGE_SENSORS_DEVICE_POSITION_MOVING_IN_BAG ((USAGE) 0x0984) +#define HID_USAGE_SENSORS_DEVICE_POSITION_STATIONARY_IN_BAG ((USAGE) 0x0985) +#define HID_USAGE_SENSORS_STEP_TYPE_UNKNOWN ((USAGE) 0x0990) +#define HID_USAGE_SENSORS_STEP_TYPE_WALKING ((USAGE) 0x0991) +#define HID_USAGE_SENSORS_STEP_TYPE_RUNNING ((USAGE) 0x0992) +#define HID_USAGE_SENSORS_GESTURE_STATE_UNKNOWN ((USAGE) 0x09A0) +#define HID_USAGE_SENSORS_GESTURE_STATE_STARTED ((USAGE) 0x09A1) +#define HID_USAGE_SENSORS_GESTURE_STATE_COMPLETED ((USAGE) 0x09A2) +#define HID_USAGE_SENSORS_GESTURE_STATE_CANCELLED ((USAGE) 0x09A3) +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_UNKNOWN ((USAGE) 0x09B0) +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_PANEL_1 ((USAGE) 0x09B1) +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_PANEL_2 ((USAGE) 0x09B2) +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_BOTH ((USAGE) 0x09B3) +#define HID_USAGE_SENSORS_HINGE_FOLD_TYPE_UNKNOWN ((USAGE) 0x09B4) +#define HID_USAGE_SENSORS_HINGE_FOLD_TYPE_INCREASING ((USAGE) 0x09B5) +#define HID_USAGE_SENSORS_HINGE_FOLD_TYPE_DECREASING ((USAGE) 0x09B6) +#define HID_USAGE_SENSORS_HUMAN_PRESENCE_DETECTION_TYPE_VENDORDEFINED_NONBIOMETRIC ((USAGE) 0x09C0) +#define HID_USAGE_SENSORS_HUMAN_PRESENCE_DETECTION_TYPE_VENDORDEFINED_BIOMETRIC ((USAGE) 0x09C1) +#define HID_USAGE_SENSORS_HUMAN_PRESENCE_DETECTION_TYPE_FACIAL_BIOMETRIC ((USAGE) 0x09C2) +#define HID_USAGE_SENSORS_HUMAN_PRESENCE_DETECTION_TYPE_AUDIO_BIOMETRIC ((USAGE) 0x09C3) +#define HID_USAGE_SENSORS_MODIFIER_CHANGE_SENSITIVITY_ABSOLUTE ((USAGE) 0x1000) +#define HID_USAGE_SENSORS_MODIFIER_MAXIMUM ((USAGE) 0x2000) +#define HID_USAGE_SENSORS_MODIFIER_MINIMUM ((USAGE) 0x3000) +#define HID_USAGE_SENSORS_MODIFIER_ACCURACY ((USAGE) 0x4000) +#define HID_USAGE_SENSORS_MODIFIER_RESOLUTION ((USAGE) 0x5000) +#define HID_USAGE_SENSORS_MODIFIER_THRESHOLD_HIGH ((USAGE) 0x6000) +#define HID_USAGE_SENSORS_MODIFIER_THRESHOLD_LOW ((USAGE) 0x7000) +#define HID_USAGE_SENSORS_MODIFIER_CALIBRATION_OFFSET ((USAGE) 0x8000) +#define HID_USAGE_SENSORS_MODIFIER_CALIBRATION_MULTIPLIER ((USAGE) 0x9000) +#define HID_USAGE_SENSORS_MODIFIER_REPORT_INTERVAL ((USAGE) 0xA000) +#define HID_USAGE_SENSORS_MODIFIER_FREQUENCY_MAX ((USAGE) 0xB000) +#define HID_USAGE_SENSORS_MODIFIER_PERIOD_MAX ((USAGE) 0xC000) +#define HID_USAGE_SENSORS_MODIFIER_CHANGE_SENSITIVITY_PERCENT_OF_RANGE ((USAGE) 0xD000) +#define HID_USAGE_SENSORS_MODIFIER_CHANGE_SENSITIVITY_PERCENT_RELATIVE ((USAGE) 0xE000) +#define HID_USAGE_SENSORS_MODIFIER_VENDOR_RESERVED ((USAGE) 0xF000) + +// +// Simulation Controls Page (0x02) +// +#define HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE ((USAGE) 0x0001) +#define HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE ((USAGE) 0x0002) +#define HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE ((USAGE) 0x0003) +#define HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE ((USAGE) 0x0004) +#define HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE ((USAGE) 0x0005) +#define HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE ((USAGE) 0x0006) +#define HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE ((USAGE) 0x0007) +#define HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE ((USAGE) 0x0008) +#define HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE ((USAGE) 0x0009) +#define HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE ((USAGE) 0x000A) +#define HID_USAGE_SIMULATION_MAGIC_CARPET_SIMULATION_DEVICE ((USAGE) 0x000B) +#define HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE ((USAGE) 0x000C) +#define HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK ((USAGE) 0x0020) +#define HID_USAGE_SIMULATION_FLIGHT_STICK ((USAGE) 0x0021) +#define HID_USAGE_SIMULATION_CYCLIC_CONTROL ((USAGE) 0x0022) +#define HID_USAGE_SIMULATION_CYCLIC_TRIM ((USAGE) 0x0023) +#define HID_USAGE_SIMULATION_FLIGHT_YOKE ((USAGE) 0x0024) +#define HID_USAGE_SIMULATION_TRACK_CONTROL ((USAGE) 0x0025) +#define HID_USAGE_SIMULATION_AILERON ((USAGE) 0x00B0) +#define HID_USAGE_SIMULATION_AILERON_TRIM ((USAGE) 0x00B1) +#define HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL ((USAGE) 0x00B2) +#define HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE ((USAGE) 0x00B3) +#define HID_USAGE_SIMULATION_CHAFF_RELEASE ((USAGE) 0x00B4) +#define HID_USAGE_SIMULATION_COLLECTIVE_CONTROL ((USAGE) 0x00B5) +#define HID_USAGE_SIMULATION_DIVE_BRAKE ((USAGE) 0x00B6) +#define HID_USAGE_SIMULATION_ELECTRONIC_COUNTERMEASURES ((USAGE) 0x00B7) +#define HID_USAGE_SIMULATION_ELEVATOR ((USAGE) 0x00B8) +#define HID_USAGE_SIMULATION_ELEVATOR_TRIM ((USAGE) 0x00B9) +#define HID_USAGE_SIMULATION_RUDDER ((USAGE) 0x00BA) +#define HID_USAGE_SIMULATION_THROTTLE ((USAGE) 0x00BB) +#define HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS ((USAGE) 0x00BC) +#define HID_USAGE_SIMULATION_FLARE_RELEASE ((USAGE) 0x00BD) +#define HID_USAGE_SIMULATION_LANDING_GEAR ((USAGE) 0x00BE) +#define HID_USAGE_SIMULATION_TOE_BRAKE ((USAGE) 0x00BF) +#define HID_USAGE_SIMULATION_TRIGGER ((USAGE) 0x00C0) +#define HID_USAGE_SIMULATION_WEAPONS_ARM ((USAGE) 0x00C1) +#define HID_USAGE_SIMULATION_WEAPONS_SELECT ((USAGE) 0x00C2) +#define HID_USAGE_SIMULATION_WING_FLAPS ((USAGE) 0x00C3) +#define HID_USAGE_SIMULATION_ACCELERATOR ((USAGE) 0x00C4) +#define HID_USAGE_SIMULATION_BRAKE ((USAGE) 0x00C5) +#define HID_USAGE_SIMULATION_CLUTCH ((USAGE) 0x00C6) +#define HID_USAGE_SIMULATION_SHIFTER ((USAGE) 0x00C7) +#define HID_USAGE_SIMULATION_STEERING ((USAGE) 0x00C8) +#define HID_USAGE_SIMULATION_TURRET_DIRECTION ((USAGE) 0x00C9) +#define HID_USAGE_SIMULATION_BARREL_ELEVATION ((USAGE) 0x00CA) +#define HID_USAGE_SIMULATION_DIVE_PLANE ((USAGE) 0x00CB) +#define HID_USAGE_SIMULATION_BALLAST ((USAGE) 0x00CC) +#define HID_USAGE_SIMULATION_BICYCLE_CRANK ((USAGE) 0x00CD) +#define HID_USAGE_SIMULATION_HANDLE_BARS ((USAGE) 0x00CE) +#define HID_USAGE_SIMULATION_FRONT_BRAKE ((USAGE) 0x00CF) +#define HID_USAGE_SIMULATION_REAR_BRAKE ((USAGE) 0x00D0) + +// +// SoC (System on Chip) Page (0x11) +// +#define HID_USAGE_SOC_SOC_CONTROL ((USAGE) 0x0001) +#define HID_USAGE_SOC_FIRMWARE_TRANSFER ((USAGE) 0x0002) +#define HID_USAGE_SOC_FIRMWARE_FILE_ID ((USAGE) 0x0003) +#define HID_USAGE_SOC_FILE_OFFSET_IN_BYTES ((USAGE) 0x0004) +#define HID_USAGE_SOC_FILE_TRANSFER_SIZE_MAX_IN_BYTES ((USAGE) 0x0005) +#define HID_USAGE_SOC_FILE_PAYLOAD ((USAGE) 0x0006) +#define HID_USAGE_SOC_FILE_PAYLOAD_SIZE_IN_BYTES ((USAGE) 0x0007) +#define HID_USAGE_SOC_FILE_PAYLOAD_CONTAINS_LAST_BYTES ((USAGE) 0x0008) +#define HID_USAGE_SOC_FILE_TRANSFER_STOP ((USAGE) 0x0009) +#define HID_USAGE_SOC_FILE_TRANSFER_TILL_END ((USAGE) 0x000A) + +// +// Sport Controls Page (0x04) +// +#define HID_USAGE_SPORT_BASEBALL_BAT ((USAGE) 0x0001) +#define HID_USAGE_SPORT_GOLF_CLUB ((USAGE) 0x0002) +#define HID_USAGE_SPORT_ROWING_MACHINE ((USAGE) 0x0003) +#define HID_USAGE_SPORT_TREADMILL ((USAGE) 0x0004) +#define HID_USAGE_SPORT_OAR ((USAGE) 0x0030) +#define HID_USAGE_SPORT_SLOPE ((USAGE) 0x0031) +#define HID_USAGE_SPORT_RATE ((USAGE) 0x0032) +#define HID_USAGE_SPORT_STICK_SPEED ((USAGE) 0x0033) +#define HID_USAGE_SPORT_STICK_FACE_ANGLE ((USAGE) 0x0034) +#define HID_USAGE_SPORT_HEEL_TOE ((USAGE) 0x0035) +#define HID_USAGE_SPORT_FOLLOW_THROUGH ((USAGE) 0x0036) +#define HID_USAGE_SPORT_TEMPO ((USAGE) 0x0037) +#define HID_USAGE_SPORT_STICK_TYPE ((USAGE) 0x0038) +#define HID_USAGE_SPORT_HEIGHT ((USAGE) 0x0039) +#define HID_USAGE_SPORT_PUTTER ((USAGE) 0x0050) +#define HID_USAGE_SPORT_1_IRON ((USAGE) 0x0051) +#define HID_USAGE_SPORT_2_IRON ((USAGE) 0x0052) +#define HID_USAGE_SPORT_3_IRON ((USAGE) 0x0053) +#define HID_USAGE_SPORT_4_IRON ((USAGE) 0x0054) +#define HID_USAGE_SPORT_5_IRON ((USAGE) 0x0055) +#define HID_USAGE_SPORT_6_IRON ((USAGE) 0x0056) +#define HID_USAGE_SPORT_7_IRON ((USAGE) 0x0057) +#define HID_USAGE_SPORT_8_IRON ((USAGE) 0x0058) +#define HID_USAGE_SPORT_9_IRON ((USAGE) 0x0059) +#define HID_USAGE_SPORT_10_IRON ((USAGE) 0x005A) +#define HID_USAGE_SPORT_11_IRON ((USAGE) 0x005B) +#define HID_USAGE_SPORT_SAND_WEDGE ((USAGE) 0x005C) +#define HID_USAGE_SPORT_LOFT_WEDGE ((USAGE) 0x005D) +#define HID_USAGE_SPORT_POWER_WEDGE ((USAGE) 0x005E) +#define HID_USAGE_SPORT_1_WOOD ((USAGE) 0x005F) +#define HID_USAGE_SPORT_3_WOOD ((USAGE) 0x0060) +#define HID_USAGE_SPORT_5_WOOD ((USAGE) 0x0061) +#define HID_USAGE_SPORT_7_WOOD ((USAGE) 0x0062) +#define HID_USAGE_SPORT_9_WOOD ((USAGE) 0x0063) + +// +// Telephony Device Page (0x0B) +// +#define HID_USAGE_TELEPHONY_PHONE ((USAGE) 0x0001) +#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE ((USAGE) 0x0002) +#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS ((USAGE) 0x0003) +#define HID_USAGE_TELEPHONY_HANDSET ((USAGE) 0x0004) +#define HID_USAGE_TELEPHONY_HEADSET ((USAGE) 0x0005) +#define HID_USAGE_TELEPHONY_KEYPAD ((USAGE) 0x0006) +#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x0007) +#define HID_USAGE_TELEPHONY_HOOK_SWITCH ((USAGE) 0x0020) +#define HID_USAGE_TELEPHONY_FLASH ((USAGE) 0x0021) +#define HID_USAGE_TELEPHONY_FEATURE ((USAGE) 0x0022) +#define HID_USAGE_TELEPHONY_HOLD ((USAGE) 0x0023) +#define HID_USAGE_TELEPHONY_REDIAL ((USAGE) 0x0024) +#define HID_USAGE_TELEPHONY_TRANSFER ((USAGE) 0x0025) +#define HID_USAGE_TELEPHONY_DROP ((USAGE) 0x0026) +#define HID_USAGE_TELEPHONY_PARK ((USAGE) 0x0027) +#define HID_USAGE_TELEPHONY_FORWARD_CALLS ((USAGE) 0x0028) +#define HID_USAGE_TELEPHONY_ALTERNATE_FUNCTION ((USAGE) 0x0029) +#define HID_USAGE_TELEPHONY_LINE ((USAGE) 0x002A) +#define HID_USAGE_TELEPHONY_SPEAKER_PHONE ((USAGE) 0x002B) +#define HID_USAGE_TELEPHONY_CONFERENCE ((USAGE) 0x002C) +#define HID_USAGE_TELEPHONY_RING_ENABLE ((USAGE) 0x002D) +#define HID_USAGE_TELEPHONY_RING_SELECT ((USAGE) 0x002E) +#define HID_USAGE_TELEPHONY_PHONE_MUTE ((USAGE) 0x002F) +#define HID_USAGE_TELEPHONY_CALLER_ID ((USAGE) 0x0030) +#define HID_USAGE_TELEPHONY_SEND ((USAGE) 0x0031) +#define HID_USAGE_TELEPHONY_SPEED_DIAL ((USAGE) 0x0050) +#define HID_USAGE_TELEPHONY_STORE_NUMBER ((USAGE) 0x0051) +#define HID_USAGE_TELEPHONY_RECALL_NUMBER ((USAGE) 0x0052) +#define HID_USAGE_TELEPHONY_PHONE_DIRECTORY ((USAGE) 0x0053) +#define HID_USAGE_TELEPHONY_VOICE_MAIL ((USAGE) 0x0070) +#define HID_USAGE_TELEPHONY_SCREEN_CALLS ((USAGE) 0x0071) +#define HID_USAGE_TELEPHONY_DO_NOT_DISTURB ((USAGE) 0x0072) +#define HID_USAGE_TELEPHONY_MESSAGE ((USAGE) 0x0073) +#define HID_USAGE_TELEPHONY_ANSWER_ONOFF ((USAGE) 0x0074) +#define HID_USAGE_TELEPHONY_INSIDE_DIAL_TONE ((USAGE) 0x0090) +#define HID_USAGE_TELEPHONY_OUTSIDE_DIAL_TONE ((USAGE) 0x0091) +#define HID_USAGE_TELEPHONY_INSIDE_RING_TONE ((USAGE) 0x0092) +#define HID_USAGE_TELEPHONY_OUTSIDE_RING_TONE ((USAGE) 0x0093) +#define HID_USAGE_TELEPHONY_PRIORITY_RING_TONE ((USAGE) 0x0094) +#define HID_USAGE_TELEPHONY_INSIDE_RINGBACK ((USAGE) 0x0095) +#define HID_USAGE_TELEPHONY_PRIORITY_RINGBACK ((USAGE) 0x0096) +#define HID_USAGE_TELEPHONY_LINE_BUSY_TONE ((USAGE) 0x0097) +#define HID_USAGE_TELEPHONY_REORDER_TONE ((USAGE) 0x0098) +#define HID_USAGE_TELEPHONY_CALL_WAITING_TONE ((USAGE) 0x0099) +#define HID_USAGE_TELEPHONY_CONFIRMATION_TONE_1 ((USAGE) 0x009A) +#define HID_USAGE_TELEPHONY_CONFIRMATION_TONE_2 ((USAGE) 0x009B) +#define HID_USAGE_TELEPHONY_TONES_OFF ((USAGE) 0x009C) +#define HID_USAGE_TELEPHONY_OUTSIDE_RINGBACK ((USAGE) 0x009D) +#define HID_USAGE_TELEPHONY_RINGER ((USAGE) 0x009E) +#define HID_USAGE_TELEPHONY_PHONE_KEY_0 ((USAGE) 0x00B0) +#define HID_USAGE_TELEPHONY_PHONE_KEY_1 ((USAGE) 0x00B1) +#define HID_USAGE_TELEPHONY_PHONE_KEY_2 ((USAGE) 0x00B2) +#define HID_USAGE_TELEPHONY_PHONE_KEY_3 ((USAGE) 0x00B3) +#define HID_USAGE_TELEPHONY_PHONE_KEY_4 ((USAGE) 0x00B4) +#define HID_USAGE_TELEPHONY_PHONE_KEY_5 ((USAGE) 0x00B5) +#define HID_USAGE_TELEPHONY_PHONE_KEY_6 ((USAGE) 0x00B6) +#define HID_USAGE_TELEPHONY_PHONE_KEY_7 ((USAGE) 0x00B7) +#define HID_USAGE_TELEPHONY_PHONE_KEY_8 ((USAGE) 0x00B8) +#define HID_USAGE_TELEPHONY_PHONE_KEY_9 ((USAGE) 0x00B9) +#define HID_USAGE_TELEPHONY_PHONE_KEY_STAR ((USAGE) 0x00BA) +#define HID_USAGE_TELEPHONY_PHONE_KEY_POUND ((USAGE) 0x00BB) +#define HID_USAGE_TELEPHONY_PHONE_KEY_A ((USAGE) 0x00BC) +#define HID_USAGE_TELEPHONY_PHONE_KEY_B ((USAGE) 0x00BD) +#define HID_USAGE_TELEPHONY_PHONE_KEY_C ((USAGE) 0x00BE) +#define HID_USAGE_TELEPHONY_PHONE_KEY_D ((USAGE) 0x00BF) +#define HID_USAGE_TELEPHONY_PHONE_CALL_HISTORY_KEY ((USAGE) 0x00C0) +#define HID_USAGE_TELEPHONY_PHONE_CALLER_ID_KEY ((USAGE) 0x00C1) +#define HID_USAGE_TELEPHONY_PHONE_SETTINGS_KEY ((USAGE) 0x00C2) +#define HID_USAGE_TELEPHONY_HOST_CONTROL ((USAGE) 0x00F0) +#define HID_USAGE_TELEPHONY_HOST_AVAILABLE ((USAGE) 0x00F1) +#define HID_USAGE_TELEPHONY_HOST_CALL_ACTIVE ((USAGE) 0x00F2) +#define HID_USAGE_TELEPHONY_ACTIVATE_HANDSET_AUDIO ((USAGE) 0x00F3) +#define HID_USAGE_TELEPHONY_RING_TYPE ((USAGE) 0x00F4) +#define HID_USAGE_TELEPHONY_REDIALABLE_PHONE_NUMBER ((USAGE) 0x00F5) +#define HID_USAGE_TELEPHONY_STOP_RING_TONE ((USAGE) 0x00F8) +#define HID_USAGE_TELEPHONY_PSTN_RING_TONE ((USAGE) 0x00F9) +#define HID_USAGE_TELEPHONY_HOST_RING_TONE ((USAGE) 0x00FA) +#define HID_USAGE_TELEPHONY_ALERT_SOUND_ERROR ((USAGE) 0x00FB) +#define HID_USAGE_TELEPHONY_ALERT_SOUND_CONFIRM ((USAGE) 0x00FC) +#define HID_USAGE_TELEPHONY_ALERT_SOUND_NOTIFICATION ((USAGE) 0x00FD) +#define HID_USAGE_TELEPHONY_SILENT_RING ((USAGE) 0x00FE) +#define HID_USAGE_TELEPHONY_EMAIL_MESSAGE_WAITING ((USAGE) 0x0108) +#define HID_USAGE_TELEPHONY_VOICEMAIL_MESSAGE_WAITING ((USAGE) 0x0109) +#define HID_USAGE_TELEPHONY_HOST_HOLD ((USAGE) 0x010A) +#define HID_USAGE_TELEPHONY_INCOMING_CALL_HISTORY_COUNT ((USAGE) 0x0110) +#define HID_USAGE_TELEPHONY_OUTGOING_CALL_HISTORY_COUNT ((USAGE) 0x0111) +#define HID_USAGE_TELEPHONY_INCOMING_CALL_HISTORY ((USAGE) 0x0112) +#define HID_USAGE_TELEPHONY_OUTGOING_CALL_HISTORY ((USAGE) 0x0113) +#define HID_USAGE_TELEPHONY_PHONE_LOCALE ((USAGE) 0x0114) +#define HID_USAGE_TELEPHONY_PHONE_TIME_SECOND ((USAGE) 0x0140) +#define HID_USAGE_TELEPHONY_PHONE_TIME_MINUTE ((USAGE) 0x0141) +#define HID_USAGE_TELEPHONY_PHONE_TIME_HOUR ((USAGE) 0x0142) +#define HID_USAGE_TELEPHONY_PHONE_DATE_DAY ((USAGE) 0x0143) +#define HID_USAGE_TELEPHONY_PHONE_DATE_MONTH ((USAGE) 0x0144) +#define HID_USAGE_TELEPHONY_PHONE_DATE_YEAR ((USAGE) 0x0145) +#define HID_USAGE_TELEPHONY_HANDSET_NICKNAME ((USAGE) 0x0146) +#define HID_USAGE_TELEPHONY_ADDRESS_BOOK_ID ((USAGE) 0x0147) +#define HID_USAGE_TELEPHONY_CALL_DURATION ((USAGE) 0x014A) +#define HID_USAGE_TELEPHONY_DUAL_MODE_PHONE ((USAGE) 0x014B) + +// +// Unicode Page (0x10) +// +// There is no need to label these usages. +// + +// +// VESA Virtual Controls Page (0x82) +// +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_DEGAUSS ((USAGE) 0x0001) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_BRIGHTNESS ((USAGE) 0x0010) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_CONTRAST ((USAGE) 0x0012) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_RED_VIDEO_GAIN ((USAGE) 0x0016) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_GREEN_VIDEO_GAIN ((USAGE) 0x0018) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_BLUE_VIDEO_GAIN ((USAGE) 0x001A) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_FOCUS ((USAGE) 0x001C) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_POSITION ((USAGE) 0x0020) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_SIZE ((USAGE) 0x0022) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_PINCUSHION ((USAGE) 0x0024) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_PINCUSHION_BALANCE ((USAGE) 0x0026) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_MISCONVERGENCE ((USAGE) 0x0028) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_LINEARITY ((USAGE) 0x002A) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_LINEARITY_BALANCE ((USAGE) 0x002C) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_POSITION ((USAGE) 0x0030) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_SIZE ((USAGE) 0x0032) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_PINCUSHION ((USAGE) 0x0034) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_PINCUSHION_BALANCE ((USAGE) 0x0036) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_MISCONVERGENCE ((USAGE) 0x0038) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_LINEARITY ((USAGE) 0x003A) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_LINEARITY_BALANCE ((USAGE) 0x003C) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_PARALLELOGRAM_DISTORTION_KEY_BALANCE ((USAGE) 0x0040) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_TRAPEZOIDAL_DISTORTION_KEY ((USAGE) 0x0042) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_TILT_ROTATION ((USAGE) 0x0044) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_TOP_CORNER_DISTORTION_CONTROL ((USAGE) 0x0046) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_TOP_CORNER_DISTORTION_BALANCE ((USAGE) 0x0048) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_BOTTOM_CORNER_DISTORTION_CONTROL ((USAGE) 0x004A) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_BOTTOM_CORNER_DISTORTION_BALANCE ((USAGE) 0x004C) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_MOIRE ((USAGE) 0x0056) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_MOIRE ((USAGE) 0x0058) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_INPUT_LEVEL_SELECT ((USAGE) 0x005E) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_INPUT_SOURCE_SELECT ((USAGE) 0x0060) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_RED_VIDEO_BLACK_LEVEL ((USAGE) 0x006C) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_GREEN_VIDEO_BLACK_LEVEL ((USAGE) 0x006E) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_BLUE_VIDEO_BLACK_LEVEL ((USAGE) 0x0070) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_AUTO_SIZE_CENTER ((USAGE) 0x00A2) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_POLARITY_HORIZONTAL_SYNCHRONIZATION ((USAGE) 0x00A4) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_POLARITY_VERTICAL_SYNCHRONIZATION ((USAGE) 0x00A6) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_SYNCHRONIZATION_TYPE ((USAGE) 0x00A8) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_SCREEN_ORIENTATION ((USAGE) 0x00AA) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_HORIZONTAL_FREQUENCY ((USAGE) 0x00AC) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_VERTICAL_FREQUENCY ((USAGE) 0x00AE) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_SETTINGS ((USAGE) 0x00B0) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_ON_SCREEN_DISPLAY ((USAGE) 0x00CA) +#define HID_USAGE_VESA_VIRTUAL_CONTROLS_STEREO_MODE ((USAGE) 0x00D4) + +// +// VR Controls Page (0x03) +// +#define HID_USAGE_VR_BELT ((USAGE) 0x0001) +#define HID_USAGE_VR_BODY_SUIT ((USAGE) 0x0002) +#define HID_USAGE_VR_FLEXOR ((USAGE) 0x0003) +#define HID_USAGE_VR_GLOVE ((USAGE) 0x0004) +#define HID_USAGE_VR_HEAD_TRACKER ((USAGE) 0x0005) +#define HID_USAGE_VR_HEAD_MOUNTED_DISPLAY ((USAGE) 0x0006) +#define HID_USAGE_VR_HAND_TRACKER ((USAGE) 0x0007) +#define HID_USAGE_VR_OCULOMETER ((USAGE) 0x0008) +#define HID_USAGE_VR_VEST ((USAGE) 0x0009) +#define HID_USAGE_VR_ANIMATRONIC_DEVICE ((USAGE) 0x000A) +#define HID_USAGE_VR_STEREO_ENABLE ((USAGE) 0x0020) +#define HID_USAGE_VR_DISPLAY_ENABLE ((USAGE) 0x0021) + +#endif diff --git a/src/archutils/Win32/ddk/setupapi.h b/src/archutils/Win32/ddk/setupapi.h index 1e4baeb917..45fdfe5df9 100644 --- a/src/archutils/Win32/ddk/setupapi.h +++ b/src/archutils/Win32/ddk/setupapi.h @@ -1,5927 +1,7640 @@ -/*++ - -Copyright (c) 1995-1999 Microsoft Corporation - -Module Name: - - setupapi.h - -Abstract: - - Public header file for Windows NT Setup and Device Installer services Dll. - ---*/ - -#ifndef _INC_SETUPAPI -#define _INC_SETUPAPI - -#pragma once - -// -// Define API decoration for direct importing of DLL references. -// -#if !defined(_SETUPAPI_) -#define WINSETUPAPI DECLSPEC_IMPORT -#else -#define WINSETUPAPI -#endif - -#ifndef __LPGUID_DEFINED__ -#define __LPGUID_DEFINED__ -typedef GUID *LPGUID; -#endif - -// -// Include commctrl.h for our use of HIMAGELIST and wizard support. -// -#include - - -#include // Assume byte packing throughout - -#ifdef __cplusplus -extern "C" { -#endif - -// -// Define maximum string length constants as specified by -// Windows 95. -// -#define LINE_LEN 256 // Win95-compatible maximum for displayable - // strings coming from a device INF. -#define MAX_INF_STRING_LENGTH 4096 // Actual maximum size of an INF string - // (including string substitutions). -#define MAX_TITLE_LEN 60 -#define MAX_INSTRUCTION_LEN 256 -#define MAX_LABEL_LEN 30 -#define MAX_SERVICE_NAME_LEN 256 -#define MAX_SUBTITLE_LEN 256 - -// -// Define maximum length of a machine name in the format expected by ConfigMgr32 -// CM_Connect_Machine (i.e., "\\\\MachineName\0"). -// -#define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3) - -// -// Define type for reference to loaded inf file -// -typedef PVOID HINF; - -// -// Inf context structure. Applications must not interpret or -// overwrite values in these structures. -// -typedef struct _INFCONTEXT { - PVOID Inf; - PVOID CurrentInf; - UINT Section; - UINT Line; -} INFCONTEXT, *PINFCONTEXT; - -// -// Inf file information structure. -// -typedef struct _SP_INF_INFORMATION { - DWORD InfStyle; - DWORD InfCount; - BYTE VersionData[ANYSIZE_ARRAY]; -} SP_INF_INFORMATION, *PSP_INF_INFORMATION; - -// -// Define structure for passing alternate platform info into -// SetupSetFileQueueAlternatePlatform and SetupQueryInfOriginalFileInformation. -// -typedef struct _SP_ALTPLATFORM_INFO { - DWORD cbSize; - // - // platform to use (VER_PLATFORM_WIN32_WINDOWS or VER_PLATFORM_WIN32_NT) - // - DWORD Platform; - // - // major and minor version numbers to use - // - DWORD MajorVersion; - DWORD MinorVersion; - // - // processor architecture to use (PROCESSOR_ARCHITECTURE_INTEL, - // PROCESSOR_ARCHITECTURE_ALPHA, PROCESSOR_ARCHITECTURE_IA64, or - // PROCESSOR_ARCHITECTURE_ALPHA64) - // - WORD ProcessorArchitecture; - - WORD Reserved; // must be zero. -} SP_ALTPLATFORM_INFO, *PSP_ALTPLATFORM_INFO; - -// -// Define structure that is filled in by SetupQueryInfOriginalFileInformation -// to indicate the INF's original name and the original name of the (potentially -// platform-specific) catalog file specified by that INF. -// -typedef struct _SP_ORIGINAL_FILE_INFO_A { - DWORD cbSize; - CHAR OriginalInfName[MAX_PATH]; - CHAR OriginalCatalogName[MAX_PATH]; -} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A; - -typedef struct _SP_ORIGINAL_FILE_INFO_W { - DWORD cbSize; - WCHAR OriginalInfName[MAX_PATH]; - WCHAR OriginalCatalogName[MAX_PATH]; -} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W; - -#ifdef UNICODE -typedef SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO; -typedef PSP_ORIGINAL_FILE_INFO_W PSP_ORIGINAL_FILE_INFO; -#else -typedef SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO; -typedef PSP_ORIGINAL_FILE_INFO_A PSP_ORIGINAL_FILE_INFO; -#endif - -// -// SP_INF_INFORMATION.InfStyle values -// -#define INF_STYLE_NONE 0x00000000 // unrecognized or non-existent -#define INF_STYLE_OLDNT 0x00000001 // winnt 3.x -#define INF_STYLE_WIN4 0x00000002 // Win95 - -// -// Additional InfStyle flags that may be specified when calling SetupOpenInfFile. -// -// -#define INF_STYLE_CACHE_ENABLE 0x00000010 // always cache INF, even outside of %windir%\Inf -#define INF_STYLE_CACHE_DISABLE 0x00000020 // delete cached INF information - - -// -// Target directory specs. -// -#define DIRID_ABSOLUTE -1 // real 32-bit -1 -#define DIRID_ABSOLUTE_16BIT 0xffff // 16-bit -1 for compat w/setupx -#define DIRID_NULL 0 -#define DIRID_SRCPATH 1 -#define DIRID_WINDOWS 10 -#define DIRID_SYSTEM 11 // system32 -#define DIRID_DRIVERS 12 -#define DIRID_IOSUBSYS DIRID_DRIVERS -#define DIRID_INF 17 -#define DIRID_HELP 18 -#define DIRID_FONTS 20 -#define DIRID_VIEWERS 21 -#define DIRID_COLOR 23 -#define DIRID_APPS 24 -#define DIRID_SHARED 25 -#define DIRID_BOOT 30 - -#define DIRID_SYSTEM16 50 -#define DIRID_SPOOL 51 -#define DIRID_SPOOLDRIVERS 52 -#define DIRID_USERPROFILE 53 -#define DIRID_LOADER 54 -#define DIRID_PRINTPROCESSOR 55 - -#define DIRID_DEFAULT DIRID_SYSTEM - -// -// The following DIRIDs are for commonly-used shell "special folders". The -// complete list of such folders is contained in shlobj.h. In that headerfile, -// each folder is assigned a CSIDL_* value. The DIRID values below are created -// by taking the CSIDL value in shlobj.h and OR'ing it with 0x4000. Thus, if -// an INF needs to reference other special folders not defined below, it may -// generate one using the above mechanism, and setupapi will automatically deal -// with it and use the corresponding shell's path where appropriate. (Remember -// that DIRIDs must be specified in decimal, not hex, in an INF when used for -// string substitution.) -// -#define DIRID_COMMON_STARTMENU 16406 // All Users\Start Menu -#define DIRID_COMMON_PROGRAMS 16407 // All Users\Start Menu\Programs -#define DIRID_COMMON_STARTUP 16408 // All Users\Start Menu\Programs\Startup -#define DIRID_COMMON_DESKTOPDIRECTORY 16409 // All Users\Desktop -#define DIRID_COMMON_FAVORITES 16415 // All Users\Favorites -#define DIRID_COMMON_APPDATA 16419 // All Users\Application Data - -#define DIRID_PROGRAM_FILES 16422 // Program Files -#define DIRID_SYSTEM_X86 16425 // system32 on RISC -#define DIRID_PROGRAM_FILES_X86 16426 // Program Files on RISC -#define DIRID_PROGRAM_FILES_COMMON 16427 // Program Files\Common -#define DIRID_PROGRAM_FILES_COMMONX86 16428 // x86 Program Files\Common on RISC - -#define DIRID_COMMON_TEMPLATES 16429 // All Users\Templates -#define DIRID_COMMON_DOCUMENTS 16430 // All Users\Documents - - -// -// First user-definable dirid. See SetupSetDirectoryId(). -// -#define DIRID_USER 0x8000 - - -// -// Setup callback notification routine type -// -typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)( - IN PVOID Context, - IN UINT Notification, - IN UINT_PTR Param1, - IN UINT_PTR Param2 - ); - -typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)( - IN PVOID Context, - IN UINT Notification, - IN UINT_PTR Param1, - IN UINT_PTR Param2 - ); - -#ifdef UNICODE -#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W -#else -#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A -#endif - - -// -// Operation/queue start/end notification. These are ordinal values. -// -#define SPFILENOTIFY_STARTQUEUE 0x00000001 -#define SPFILENOTIFY_ENDQUEUE 0x00000002 -#define SPFILENOTIFY_STARTSUBQUEUE 0x00000003 -#define SPFILENOTIFY_ENDSUBQUEUE 0x00000004 -#define SPFILENOTIFY_STARTDELETE 0x00000005 -#define SPFILENOTIFY_ENDDELETE 0x00000006 -#define SPFILENOTIFY_DELETEERROR 0x00000007 -#define SPFILENOTIFY_STARTRENAME 0x00000008 -#define SPFILENOTIFY_ENDRENAME 0x00000009 -#define SPFILENOTIFY_RENAMEERROR 0x0000000a -#define SPFILENOTIFY_STARTCOPY 0x0000000b -#define SPFILENOTIFY_ENDCOPY 0x0000000c -#define SPFILENOTIFY_COPYERROR 0x0000000d -#define SPFILENOTIFY_NEEDMEDIA 0x0000000e -#define SPFILENOTIFY_QUEUESCAN 0x0000000f -// -// These are used with SetupIterateCabinet(). -// -#define SPFILENOTIFY_CABINETINFO 0x00000010 -#define SPFILENOTIFY_FILEINCABINET 0x00000011 -#define SPFILENOTIFY_NEEDNEWCABINET 0x00000012 -#define SPFILENOTIFY_FILEEXTRACTED 0x00000013 -#define SPFILENOTIFY_FILEOPDELAYED 0x00000014 -// -// These are used for backup operations -// -#define SPFILENOTIFY_STARTBACKUP 0x00000015 -#define SPFILENOTIFY_BACKUPERROR 0x00000016 -#define SPFILENOTIFY_ENDBACKUP 0x00000017 -// -// Extended notification for SetupScanFileQueue(Flags=SPQ_SCAN_USE_CALLBACKEX) -// -#define SPFILENOTIFY_QUEUESCAN_EX 0x00000018 -// -// Copy notification. These are bit flags that may be combined. -// -#define SPFILENOTIFY_LANGMISMATCH 0x00010000 -#define SPFILENOTIFY_TARGETEXISTS 0x00020000 -#define SPFILENOTIFY_TARGETNEWER 0x00040000 - -// -// File operation codes and callback outcomes. -// -#define FILEOP_COPY 0 -#define FILEOP_RENAME 1 -#define FILEOP_DELETE 2 -#define FILEOP_BACKUP 3 - -#define FILEOP_ABORT 0 -#define FILEOP_DOIT 1 -#define FILEOP_SKIP 2 -#define FILEOP_RETRY FILEOP_DOIT -#define FILEOP_NEWPATH 4 - -// -// Flags in inf copy sections -// -#define COPYFLG_WARN_IF_SKIP 0x00000001 // warn if user tries to skip file -#define COPYFLG_NOSKIP 0x00000002 // disallow skipping this file -#define COPYFLG_NOVERSIONCHECK 0x00000004 // ignore versions and overwrite target -#define COPYFLG_FORCE_FILE_IN_USE 0x00000008 // force file-in-use behavior -#define COPYFLG_NO_OVERWRITE 0x00000010 // do not copy if file exists on target -#define COPYFLG_NO_VERSION_DIALOG 0x00000020 // do not copy if target is newer -#define COPYFLG_OVERWRITE_OLDER_ONLY 0x00000040 // leave target alone if version same as source -#define COPYFLG_REPLACEONLY 0x00000400 // copy only if file exists on target -#define COPYFLG_NODECOMP 0x00000800 // don't attempt to decompress file; copy as-is -#define COPYFLG_REPLACE_BOOT_FILE 0x00001000 // file must be present upon reboot (i.e., it's - // needed by the loader); this flag implies a reboot -#define COPYFLG_NOPRUNE 0x00002000 // never prune this file - -// -// Flags in inf delete sections -// New flags go in high word -// -#define DELFLG_IN_USE 0x00000001 // queue in-use file for delete -#define DELFLG_IN_USE1 0x00010000 // high-word version of DELFLG_IN_USE - -// -// Source and file paths. Used when notifying queue callback -// of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR. -// -typedef struct _FILEPATHS_A { - PCSTR Target; - PCSTR Source; // not used for delete operations - UINT Win32Error; - DWORD Flags; // such as SP_COPY_NOSKIP for copy errors -} FILEPATHS_A, *PFILEPATHS_A; - -typedef struct _FILEPATHS_W { - PCWSTR Target; - PCWSTR Source; // not used for delete operations - UINT Win32Error; - DWORD Flags; // such as SP_COPY_NOSKIP for copy errors -} FILEPATHS_W, *PFILEPATHS_W; - -#ifdef UNICODE -typedef FILEPATHS_W FILEPATHS; -typedef PFILEPATHS_W PFILEPATHS; -#else -typedef FILEPATHS_A FILEPATHS; -typedef PFILEPATHS_A PFILEPATHS; -#endif - - -// -// Structure used with SPFILENOTIFY_NEEDMEDIA -// -typedef struct _SOURCE_MEDIA_A { - PCSTR Reserved; - PCSTR Tagfile; // may be NULL - PCSTR Description; - // - // Pathname part and filename part of source file - // that caused us to need the media. - // - PCSTR SourcePath; - PCSTR SourceFile; - DWORD Flags; // subset of SP_COPY_xxx -} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A; - -typedef struct _SOURCE_MEDIA_W { - PCWSTR Reserved; - PCWSTR Tagfile; // may be NULL - PCWSTR Description; - // - // Pathname part and filename part of source file - // that caused us to need the media. - // - PCWSTR SourcePath; - PCWSTR SourceFile; - DWORD Flags; // subset of SP_COPY_xxx -} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W; - -#ifdef UNICODE -typedef SOURCE_MEDIA_W SOURCE_MEDIA; -typedef PSOURCE_MEDIA_W PSOURCE_MEDIA; -#else -typedef SOURCE_MEDIA_A SOURCE_MEDIA; -typedef PSOURCE_MEDIA_A PSOURCE_MEDIA; -#endif - -// -// Structure used with SPFILENOTIFY_CABINETINFO and -// SPFILENOTIFY_NEEDNEWCABINET -// -typedef struct _CABINET_INFO_A { - PCSTR CabinetPath; - PCSTR CabinetFile; - PCSTR DiskName; - USHORT SetId; - USHORT CabinetNumber; -} CABINET_INFO_A, *PCABINET_INFO_A; - -typedef struct _CABINET_INFO_W { - PCWSTR CabinetPath; - PCWSTR CabinetFile; - PCWSTR DiskName; - USHORT SetId; - USHORT CabinetNumber; -} CABINET_INFO_W, *PCABINET_INFO_W; - -#ifdef UNICODE -typedef CABINET_INFO_W CABINET_INFO; -typedef PCABINET_INFO_W PCABINET_INFO; -#else -typedef CABINET_INFO_A CABINET_INFO; -typedef PCABINET_INFO_A PCABINET_INFO; -#endif - -// -// Structure used with SPFILENOTIFY_FILEINCABINET -// -typedef struct _FILE_IN_CABINET_INFO_A { - PCSTR NameInCabinet; - DWORD FileSize; - DWORD Win32Error; - WORD DosDate; - WORD DosTime; - WORD DosAttribs; - CHAR FullTargetName[MAX_PATH]; -} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A; - -typedef struct _FILE_IN_CABINET_INFO_W { - PCWSTR NameInCabinet; - DWORD FileSize; - DWORD Win32Error; - WORD DosDate; - WORD DosTime; - WORD DosAttribs; - WCHAR FullTargetName[MAX_PATH]; -} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W; - -#ifdef UNICODE -typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO; -typedef PFILE_IN_CABINET_INFO_W PFILE_IN_CABINET_INFO; -#else -typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO; -typedef PFILE_IN_CABINET_INFO_A PFILE_IN_CABINET_INFO; -#endif - - -// -// Define type for setup file queue -// -typedef PVOID HSPFILEQ; - -// -// Structure used with SetupQueueCopyIndirect -// -typedef struct _SP_FILE_COPY_PARAMS_A { - DWORD cbSize; - HSPFILEQ QueueHandle; - PCSTR SourceRootPath; OPTIONAL - PCSTR SourcePath; OPTIONAL - PCSTR SourceFilename; - PCSTR SourceDescription; OPTIONAL - PCSTR SourceTagfile; OPTIONAL - PCSTR TargetDirectory; - PCSTR TargetFilename; OPTIONAL - DWORD CopyStyle; - HINF LayoutInf; OPTIONAL - PCSTR SecurityDescriptor; OPTIONAL -} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A; - -typedef struct _SP_FILE_COPY_PARAMS_W { - DWORD cbSize; - HSPFILEQ QueueHandle; - PCWSTR SourceRootPath; OPTIONAL - PCWSTR SourcePath; OPTIONAL - PCWSTR SourceFilename; - PCWSTR SourceDescription; OPTIONAL - PCWSTR SourceTagfile; OPTIONAL - PCWSTR TargetDirectory; - PCWSTR TargetFilename; OPTIONAL - DWORD CopyStyle; - HINF LayoutInf; OPTIONAL - PCWSTR SecurityDescriptor; OPTIONAL -} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W; - -#ifdef UNICODE -typedef SP_FILE_COPY_PARAMS_W SP_FILE_COPY_PARAMS; -typedef PSP_FILE_COPY_PARAMS_W PSP_FILE_COPY_PARAMS; -#else -typedef SP_FILE_COPY_PARAMS_A SP_FILE_COPY_PARAMS; -typedef PSP_FILE_COPY_PARAMS_A PSP_FILE_COPY_PARAMS; -#endif - - -// -// Define type for setup disk space list -// -typedef PVOID HDSKSPC; - -// -// Define type for reference to device information set -// -typedef PVOID HDEVINFO; - -// -// Device information structure (references a device instance -// that is a member of a device information set) -// -typedef struct _SP_DEVINFO_DATA { - DWORD cbSize; - GUID ClassGuid; - DWORD DevInst; // DEVINST handle - ULONG_PTR Reserved; -} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA; - -// -// Device interface information structure (references a device -// interface that is associated with the device information -// element that owns it). -// -typedef struct _SP_DEVICE_INTERFACE_DATA { - DWORD cbSize; - GUID InterfaceClassGuid; - DWORD Flags; - ULONG_PTR Reserved; -} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA; - -// -// Flags for SP_DEVICE_INTERFACE_DATA.Flags field. -// -#define SPINT_ACTIVE 0x00000001 -#define SPINT_DEFAULT 0x00000002 -#define SPINT_REMOVED 0x00000004 - -// -// Backward compatibility--do not use. -// -typedef SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA; -typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA; -#define SPID_ACTIVE SPINT_ACTIVE -#define SPID_DEFAULT SPINT_DEFAULT -#define SPID_REMOVED SPINT_REMOVED - - -typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A { - DWORD cbSize; - CHAR DevicePath[ANYSIZE_ARRAY]; -} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A; - -typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W { - DWORD cbSize; - WCHAR DevicePath[ANYSIZE_ARRAY]; -} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W; - -#ifdef UNICODE -typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA; -typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_DEVICE_INTERFACE_DETAIL_DATA; -#else -typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA; -typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_DEVICE_INTERFACE_DETAIL_DATA; -#endif - -// -// Backward compatibility--do not use. -// -typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W; -typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA_W; -typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A; -typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA_A; -#ifdef UNICODE -typedef SP_INTERFACE_DEVICE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA; -typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA; -#else -typedef SP_INTERFACE_DEVICE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA; -typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA; -#endif - - -// -// Structure for detailed information on a device information set (used for -// SetupDiGetDeviceInfoListDetail which supercedes the functionality of -// SetupDiGetDeviceInfoListClass). -// -typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A { - DWORD cbSize; - GUID ClassGuid; - HANDLE RemoteMachineHandle; - CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; -} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A; - -typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W { - DWORD cbSize; - GUID ClassGuid; - HANDLE RemoteMachineHandle; - WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; -} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W; - -#ifdef UNICODE -typedef SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA; -typedef PSP_DEVINFO_LIST_DETAIL_DATA_W PSP_DEVINFO_LIST_DETAIL_DATA; -#else -typedef SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA; -typedef PSP_DEVINFO_LIST_DETAIL_DATA_A PSP_DEVINFO_LIST_DETAIL_DATA; -#endif - - -// -// Class installer function codes -// -#define DIF_SELECTDEVICE 0x00000001 -#define DIF_INSTALLDEVICE 0x00000002 -#define DIF_ASSIGNRESOURCES 0x00000003 -#define DIF_PROPERTIES 0x00000004 -#define DIF_REMOVE 0x00000005 -#define DIF_FIRSTTIMESETUP 0x00000006 -#define DIF_FOUNDDEVICE 0x00000007 -#define DIF_SELECTCLASSDRIVERS 0x00000008 -#define DIF_VALIDATECLASSDRIVERS 0x00000009 -#define DIF_INSTALLCLASSDRIVERS 0x0000000A -#define DIF_CALCDISKSPACE 0x0000000B -#define DIF_DESTROYPRIVATEDATA 0x0000000C -#define DIF_VALIDATEDRIVER 0x0000000D -#define DIF_MOVEDEVICE 0x0000000E -#define DIF_DETECT 0x0000000F -#define DIF_INSTALLWIZARD 0x00000010 -#define DIF_DESTROYWIZARDDATA 0x00000011 -#define DIF_PROPERTYCHANGE 0x00000012 -#define DIF_ENABLECLASS 0x00000013 -#define DIF_DETECTVERIFY 0x00000014 -#define DIF_INSTALLDEVICEFILES 0x00000015 -#define DIF_UNREMOVE 0x00000016 -#define DIF_SELECTBESTCOMPATDRV 0x00000017 -#define DIF_ALLOW_INSTALL 0x00000018 -#define DIF_REGISTERDEVICE 0x00000019 -#define DIF_NEWDEVICEWIZARD_PRESELECT 0x0000001A -#define DIF_NEWDEVICEWIZARD_SELECT 0x0000001B -#define DIF_NEWDEVICEWIZARD_PREANALYZE 0x0000001C -#define DIF_NEWDEVICEWIZARD_POSTANALYZE 0x0000001D -#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 0x0000001E -#define DIF_UNUSED1 0x0000001F -#define DIF_INSTALLINTERFACES 0x00000020 -#define DIF_DETECTCANCEL 0x00000021 -#define DIF_REGISTER_COINSTALLERS 0x00000022 -#define DIF_ADDPROPERTYPAGE_ADVANCED 0x00000023 -#define DIF_ADDPROPERTYPAGE_BASIC 0x00000024 -#define DIF_RESERVED1 0x00000025 -#define DIF_TROUBLESHOOTER 0x00000026 -#define DIF_POWERMESSAGEWAKE 0x00000027 - -typedef UINT DI_FUNCTION; // Function type for device installer - - -// -// Device installation parameters structure (associated with a -// particular device information element, or globally with a device -// information set) -// -typedef struct _SP_DEVINSTALL_PARAMS_A { - DWORD cbSize; - DWORD Flags; - DWORD FlagsEx; - HWND hwndParent; - PSP_FILE_CALLBACK InstallMsgHandler; - PVOID InstallMsgHandlerContext; - HSPFILEQ FileQueue; - ULONG_PTR ClassInstallReserved; - DWORD Reserved; - CHAR DriverPath[MAX_PATH]; -} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A; - -typedef struct _SP_DEVINSTALL_PARAMS_W { - DWORD cbSize; - DWORD Flags; - DWORD FlagsEx; - HWND hwndParent; - PSP_FILE_CALLBACK InstallMsgHandler; - PVOID InstallMsgHandlerContext; - HSPFILEQ FileQueue; - ULONG_PTR ClassInstallReserved; - DWORD Reserved; - WCHAR DriverPath[MAX_PATH]; -} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W; - -#ifdef UNICODE -typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS; -typedef PSP_DEVINSTALL_PARAMS_W PSP_DEVINSTALL_PARAMS; -#else -typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS; -typedef PSP_DEVINSTALL_PARAMS_A PSP_DEVINSTALL_PARAMS; -#endif - - -// -// SP_DEVINSTALL_PARAMS.Flags values -// -// Flags for choosing a device -// -#define DI_SHOWOEM 0x00000001L // support Other... button -#define DI_SHOWCOMPAT 0x00000002L // show compatibility list -#define DI_SHOWCLASS 0x00000004L // show class list -#define DI_SHOWALL 0x00000007L // both class & compat list shown -#define DI_NOVCP 0x00000008L // don't create a new copy queue--use - // caller-supplied FileQueue -#define DI_DIDCOMPAT 0x00000010L // Searched for compatible devices -#define DI_DIDCLASS 0x00000020L // Searched for class devices -#define DI_AUTOASSIGNRES 0x00000040L // No UI for resources if possible - -// flags returned by DiInstallDevice to indicate need to reboot/restart -#define DI_NEEDRESTART 0x00000080L // Reboot required to take effect -#define DI_NEEDREBOOT 0x00000100L // "" - -// flags for device installation -#define DI_NOBROWSE 0x00000200L // no Browse... in InsertDisk - -// Flags set by DiBuildDriverInfoList -#define DI_MULTMFGS 0x00000400L // Set if multiple manufacturers in - // class driver list - -// Flag indicates that device is disabled -#define DI_DISABLED 0x00000800L // Set if device disabled - -// Flags for Device/Class Properties -#define DI_GENERALPAGE_ADDED 0x00001000L -#define DI_RESOURCEPAGE_ADDED 0x00002000L - -// Flag to indicate the setting properties for this Device (or class) caused a change -// so the Dev Mgr UI probably needs to be updatd. -#define DI_PROPERTIES_CHANGE 0x00004000L - -// Flag to indicate that the sorting from the INF file should be used. -#define DI_INF_IS_SORTED 0x00008000L - -// Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath -// should be searched. -#define DI_ENUMSINGLEINF 0x00010000L - -// Flag that prevents ConfigMgr from removing/re-enumerating devices during device -// registration, installation, and deletion. -#define DI_DONOTCALLCONFIGMG 0x00020000L - -// The following flag can be used to install a device disabled -#define DI_INSTALLDISABLED 0x00040000L - -// Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver -// list from its existing class driver list, instead of the normal INF search. -#define DI_COMPAT_FROM_CLASS 0x00080000L - -// This flag is set if the Class Install params should be used. -#define DI_CLASSINSTALLPARAMS 0x00100000L - -// This flag is set if the caller of DiCallClassInstaller does NOT -// want the internal default action performed if the Class installer -// returns ERROR_DI_DO_DEFAULT. -#define DI_NODI_DEFAULTACTION 0x00200000L - -// The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the Setup APIs. - -// flags for device installation -#define DI_QUIETINSTALL 0x00800000L // don't confuse the user with - // questions or excess info -#define DI_NOFILECOPY 0x01000000L // No file Copy necessary -#define DI_FORCECOPY 0x02000000L // Force files to be copied from install path -#define DI_DRIVERPAGE_ADDED 0x04000000L // Prop provider added Driver page. -#define DI_USECI_SELECTSTRINGS 0x08000000L // Use Class Installer Provided strings in the Select Device Dlg -#define DI_OVERRIDE_INFFLAGS 0x10000000L // Override INF flags -#define DI_PROPS_NOCHANGEUSAGE 0x20000000L // No Enable/Disable in General Props - -#define DI_NOSELECTICONS 0x40000000L // No small icons in select device dialogs - -#define DI_NOWRITE_IDS 0x80000000L // Don't write HW & Compat IDs on install - - -// -// SP_DEVINSTALL_PARAMS.FlagsEx values -// -#define DI_FLAGSEX_USEOLDINFSEARCH 0x00000001L // Inf Search functions should not use Index Search -#define DI_FLAGSEX_AUTOSELECTRANK0 0x00000002L // SetupDiSelectDevice doesn't prompt user if rank 0 match -#define DI_FLAGSEX_CI_FAILED 0x00000004L // Failed to Load/Call class installer - -#define DI_FLAGSEX_DIDINFOLIST 0x00000010L // Did the Class Info List -#define DI_FLAGSEX_DIDCOMPATINFO 0x00000020L // Did the Compat Info List - -#define DI_FLAGSEX_FILTERCLASSES 0x00000040L -#define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080L -#define DI_FLAGSEX_DEVICECHANGE 0x00000100L -#define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200L -#define DI_FLAGSEX_PROPCHANGE_PENDING 0x00000400L // One or more device property sheets have had changes made - // to them, and need to have a DIF_PROPERTYCHANGE occur. -#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800L -#define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000L -#define DI_FLAGSEX_USECLASSFORCOMPAT 0x00002000L // Use the device's class when building compat drv list. - // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.) -#define DI_FLAGSEX_OLDINF_IN_CLASSLIST 0x00004000L // Search legacy INFs when building class driver list. -#define DI_FLAGSEX_NO_DRVREG_MODIFY 0x00008000L // Don't run AddReg and DelReg for device's software (driver) key. -#define DI_FLAGSEX_IN_SYSTEM_SETUP 0x00010000L // Installation is occurring during initial system setup. -#define DI_FLAGSEX_INET_DRIVER 0x00020000L // Driver came from Windows Update -#define DI_FLAGSEX_APPENDDRIVERLIST 0x00040000L // Cause SetupDiBuildDriverInfoList to append - // a new driver list to an existing list. -#define DI_FLAGSEX_PREINSTALLBACKUP 0x00080000L // backup all files required by old inf before install -#define DI_FLAGSEX_BACKUPONREPLACE 0x00100000L // backup files required by old inf as they are replaced -#define DI_FLAGSEX_DRIVERLIST_FROM_URL 0x00200000L // build driver list from INF(s) retrieved from URL specified - // in SP_DEVINSTALL_PARAMS.DriverPath (empty string means - // Windows Update website) -#define DI_FLAGSEX_RESERVED1 0x00400000L -#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000L // Don't include old Internet drivers when building - // a driver list. -#define DI_FLAGSEX_POWERPAGE_ADDED 0x01000000L // class installer added their own power page - -// -// Class installation parameters header. This must be the first field of any -// class install parameter structure. The InstallFunction field must be set to -// the function code corresponding to the structure, and the cbSize field must -// be set to the size of the header structure. E.g., -// -// SP_ENABLECLASS_PARAMS EnableClassParams; -// -// EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); -// EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS; -// -typedef struct _SP_CLASSINSTALL_HEADER { - DWORD cbSize; - DI_FUNCTION InstallFunction; -} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER; - - -// -// Structure corresponding to a DIF_ENABLECLASS install function. -// -typedef struct _SP_ENABLECLASS_PARAMS { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - GUID ClassGuid; - DWORD EnableMessage; -} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS; - -#define ENABLECLASS_QUERY 0 -#define ENABLECLASS_SUCCESS 1 -#define ENABLECLASS_FAILURE 2 - - -// -// Structure corresponding to a DIF_MOVEDEVICE install function. -// -typedef struct _SP_MOVEDEV_PARAMS { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - SP_DEVINFO_DATA SourceDeviceInfoData; -} SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS; - - -// -// Values indicating a change in a device's state -// -#define DICS_ENABLE 0x00000001 -#define DICS_DISABLE 0x00000002 -#define DICS_PROPCHANGE 0x00000003 -#define DICS_START 0x00000004 -#define DICS_STOP 0x00000005 -// -// Values specifying the scope of a device property change -// -#define DICS_FLAG_GLOBAL 0x00000001 // make change in all hardware profiles -#define DICS_FLAG_CONFIGSPECIFIC 0x00000002 // make change in specified profile only -#define DICS_FLAG_CONFIGGENERAL 0x00000004 // 1 or more hardware profile-specific - // changes to follow. -// -// Structure corresponding to a DIF_PROPERTYCHANGE install function. -// -typedef struct _SP_PROPCHANGE_PARAMS { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - DWORD StateChange; - DWORD Scope; - DWORD HwProfile; -} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS; - - -// -// Structure corresponding to a DIF_REMOVE install function. -// -typedef struct _SP_REMOVEDEVICE_PARAMS { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - DWORD Scope; - DWORD HwProfile; -} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS; - -#define DI_REMOVEDEVICE_GLOBAL 0x00000001 -#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002 - - -// -// Structure corresponding to a DIF_UNREMOVE install function. -// -typedef struct _SP_UNREMOVEDEVICE_PARAMS { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - DWORD Scope; - DWORD HwProfile; -} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS; - -#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002 - - -// -// Structure corresponding to a DIF_SELECTDEVICE install function. -// -typedef struct _SP_SELECTDEVICE_PARAMS_A { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - CHAR Title[MAX_TITLE_LEN]; - CHAR Instructions[MAX_INSTRUCTION_LEN]; - CHAR ListLabel[MAX_LABEL_LEN]; - CHAR SubTitle[MAX_SUBTITLE_LEN]; - BYTE Reserved[2]; // DWORD size alignment -} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A; - -typedef struct _SP_SELECTDEVICE_PARAMS_W { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - WCHAR Title[MAX_TITLE_LEN]; - WCHAR Instructions[MAX_INSTRUCTION_LEN]; - WCHAR ListLabel[MAX_LABEL_LEN]; - WCHAR SubTitle[MAX_SUBTITLE_LEN]; -} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W; - -#ifdef UNICODE -typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS; -typedef PSP_SELECTDEVICE_PARAMS_W PSP_SELECTDEVICE_PARAMS; -#else -typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS; -typedef PSP_SELECTDEVICE_PARAMS_A PSP_SELECTDEVICE_PARAMS; -#endif - - -// -// Callback routine for giving progress notification during detection -// -typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)( - IN PVOID ProgressNotifyParam, - IN DWORD DetectComplete - ); - -// where: -// ProgressNotifyParam - value supplied by caller requesting detection. -// DetectComplete - Percent completion, to be incremented by class -// installer, as it steps thru its detection. -// -// Return Value - If TRUE, then detection is cancelled. Allows caller -// requesting detection to stop detection asap. -// - -// -// Structure corresponding to a DIF_DETECT install function. -// -typedef struct _SP_DETECTDEVICE_PARAMS { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - PDETECT_PROGRESS_NOTIFY DetectProgressNotify; - PVOID ProgressNotifyParam; -} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS; - - -// -// 'Add New Device' installation wizard structure (backward-compatibility -// only--respond to DIF_NEWDEVICEWIZARD_* requests instead). -// -// Structure corresponding to a DIF_INSTALLWIZARD install function. -// (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA, -// but DIF_INSTALLWIZARD is the associated function code in the class -// installation parameter structure in both cases.) -// -// Define maximum number of dynamic wizard pages that can be added to -// hardware install wizard. -// -#define MAX_INSTALLWIZARD_DYNAPAGES 20 - -typedef struct _SP_INSTALLWIZARD_DATA { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - DWORD Flags; - HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; - DWORD NumDynamicPages; - DWORD DynamicPageFlags; - DWORD PrivateFlags; - LPARAM PrivateData; - HWND hwndWizardDlg; -} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA; - -// -// SP_INSTALLWIZARD_DATA.Flags values -// -#define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001 -#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002 -#define NDW_INSTALLFLAG_NEEDRESTART DI_NEEDRESTART -#define NDW_INSTALLFLAG_NEEDREBOOT DI_NEEDREBOOT -#define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200 -#define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400 -#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800 -#define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000 -#define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000 -#define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000 -#define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000 -#define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000 -#define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000 -#define NDW_INSTALLFLAG_USERCANCEL 0x00040000 -#define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000 - - -// -// SP_INSTALLWIZARD_DATA.DynamicPageFlags values -// -// This flag is set if a Class installer has added pages to the install wizard. -// -#define DYNAWIZ_FLAG_PAGESADDED 0x00000001 - -// -// Set this flag if you jump to the analyze page, and want it to -// handle conflicts for you. NOTE. You will not get control back -// in the event of a conflict if you set this flag. -// -#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008 - -// -// The following flags are not used by the Windows NT hardware wizard. -// -#define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002 -#define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004 - - -// -// Reserve a range of wizard page resource IDs for internal use. Some of -// these IDs are for use by class installers that respond to the obsolete -// DIF_INSTALLWIZARD/DIF_DESTROYWIZARDDATA messages. These IDs are listed -// below. -// -#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000 -#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000 - -// -// Define wizard page resource IDs to be used when adding custom pages to the -// hardware install wizard via DIF_INSTALLWIZARD. Pages marked with -// (CLASS INSTALLER PROVIDED) _must_ be supplied by the class installer if it -// responds to the DIF_INSTALLWIZARD request. -// - -// -// Resource ID for the first page that the install wizard will go to after -// adding the class installer pages. (CLASS INSTALLER PROVIDED) -// -#define IDD_DYNAWIZ_FIRSTPAGE 10000 - -// -// Resource ID for the page that the Select Device page will go back to. -// (CLASS INSTALLER PROVIDED) -// -#define IDD_DYNAWIZ_SELECT_PREVPAGE 10001 - -// -// Resource ID for the page that the Select Device page will go forward to. -// (CLASS INSTALLER PROVIDED) -// -#define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002 - -// -// Resource ID for the page that the Analyze dialog should go back to -// This will only be used in the event that there is a problem, and the user -// selects Back from the analyze proc. (CLASS INSTALLER PROVIDED) -// -#define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003 - -// -// Resource ID for the page that the Analyze dialog should go to if it -// continues from the analyze proc. (CLASS INSTALLER PROVIDED) -// -#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004 - -// -// Resource ID of the hardware install wizard's select device page. -// This ID can be used to go directly to the hardware install wizard's select -// device page. (This is the resource ID of the Select Device wizard page -// retrieved via SetupDiGetWizardPage when SPWPT_SELECTDEVICE is the requested -// PageType.) -// -#define IDD_DYNAWIZ_SELECTDEV_PAGE 10009 - -// -// Resource ID of the hardware install wizard's device analysis page. -// This ID can be use to go directly to the hardware install wizard's analysis -// page. -// -#define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010 - -// -// Resource ID of the hardware install wizard's install detected devices page. -// This ID can be use to go directly to the hardware install wizard's install -// detected devices page. -// -#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011 - -// -// Resource ID of the hardware install wizard's select class page. -// This ID can be use to go directly to the hardware install wizard's select -// class page. -// -#define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012 - -// -// The following class installer-provided wizard page resource IDs are not used -// by the Windows NT hardware wizard. -// -#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006 -#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007 -#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008 - - -// -// Structure corresponding to the following DIF_NEWDEVICEWIZARD_* install -// functions: -// -// DIF_NEWDEVICEWIZARD_PRESELECT -// DIF_NEWDEVICEWIZARD_SELECT -// DIF_NEWDEVICEWIZARD_PREANALYZE -// DIF_NEWDEVICEWIZARD_POSTANALYZE -// DIF_NEWDEVICEWIZARD_FINISHINSTALL -// -typedef struct _SP_NEWDEVICEWIZARD_DATA { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - DWORD Flags; // presently unused--must be zero. - HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; - DWORD NumDynamicPages; - HWND hwndWizardDlg; -} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA; - - -typedef SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA; -typedef PSP_NEWDEVICEWIZARD_DATA PSP_ADDPROPERTYPAGE_DATA; - - -// -// Structure corresponding to the DIF_TROUBLESHOOTER install function -// -typedef struct _SP_TROUBLESHOOTER_PARAMS_A { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - CHAR ChmFile[MAX_PATH]; - CHAR HtmlTroubleShooter[MAX_PATH]; -} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A; - -typedef struct _SP_TROUBLESHOOTER_PARAMS_W { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - WCHAR ChmFile[MAX_PATH]; - WCHAR HtmlTroubleShooter[MAX_PATH]; -} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W; - -#ifdef UNICODE -typedef SP_TROUBLESHOOTER_PARAMS_W SP_TROUBLESHOOTER_PARAMS; -typedef PSP_TROUBLESHOOTER_PARAMS_W PSP_TROUBLESHOOTER_PARAMS; -#else -typedef SP_TROUBLESHOOTER_PARAMS_A SP_TROUBLESHOOTER_PARAMS; -typedef PSP_TROUBLESHOOTER_PARAMS_A PSP_TROUBLESHOOTER_PARAMS; -#endif - - -// -// Structure corresponding to the DIF_POWERMESSAGEWAKE install function -// -typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - CHAR PowerMessageWake[LINE_LEN*2]; -} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A; - -typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W { - SP_CLASSINSTALL_HEADER ClassInstallHeader; - WCHAR PowerMessageWake[LINE_LEN*2]; -} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W; - -#ifdef UNICODE -typedef SP_POWERMESSAGEWAKE_PARAMS_W SP_POWERMESSAGEWAKE_PARAMS; -typedef PSP_POWERMESSAGEWAKE_PARAMS_W PSP_POWERMESSAGEWAKE_PARAMS; -#else -typedef SP_POWERMESSAGEWAKE_PARAMS_A SP_POWERMESSAGEWAKE_PARAMS; -typedef PSP_POWERMESSAGEWAKE_PARAMS_A PSP_POWERMESSAGEWAKE_PARAMS; -#endif - - -// -// Driver information structure (member of a driver info list that may be associated -// with a particular device instance, or (globally) with a device information set) -// -typedef struct _SP_DRVINFO_DATA_V2_A { - DWORD cbSize; - DWORD DriverType; - ULONG_PTR Reserved; - CHAR Description[LINE_LEN]; - CHAR MfgName[LINE_LEN]; - CHAR ProviderName[LINE_LEN]; - FILETIME DriverDate; - DWORDLONG DriverVersion; -} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A; - -typedef struct _SP_DRVINFO_DATA_V2_W { - DWORD cbSize; - DWORD DriverType; - ULONG_PTR Reserved; - WCHAR Description[LINE_LEN]; - WCHAR MfgName[LINE_LEN]; - WCHAR ProviderName[LINE_LEN]; - FILETIME DriverDate; - DWORDLONG DriverVersion; -} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W; - -// -// Version 1 of the SP_DRVINFO_DATA structures, used only for compatibility -// with Windows NT 4.0/Windows 95/98 SETUPAPI.DLL -// -typedef struct _SP_DRVINFO_DATA_V1_A { - DWORD cbSize; - DWORD DriverType; - ULONG_PTR Reserved; - CHAR Description[LINE_LEN]; - CHAR MfgName[LINE_LEN]; - CHAR ProviderName[LINE_LEN]; -} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A; - -typedef struct _SP_DRVINFO_DATA_V1_W { - DWORD cbSize; - DWORD DriverType; - ULONG_PTR Reserved; - WCHAR Description[LINE_LEN]; - WCHAR MfgName[LINE_LEN]; - WCHAR ProviderName[LINE_LEN]; -} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W; - -#ifdef UNICODE -typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1; -typedef PSP_DRVINFO_DATA_V1_W PSP_DRVINFO_DATA_V1; -typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2; -typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_V2; -#else -typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_V1; -typedef PSP_DRVINFO_DATA_V1_A PSP_DRVINFO_DATA_V1; -typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_V2; -typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_V2; -#endif - -#if USE_SP_DRVINFO_DATA_V1 // use version 1 driver info data structure - -typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_A; -typedef PSP_DRVINFO_DATA_V1_A PSP_DRVINFO_DATA_A; -typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_W; -typedef PSP_DRVINFO_DATA_V1_W PSP_DRVINFO_DATA_W; -typedef SP_DRVINFO_DATA_V1 SP_DRVINFO_DATA; -typedef PSP_DRVINFO_DATA_V1 PSP_DRVINFO_DATA; - -#else // use version 2 driver info data structure - -typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A; -typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_A; -typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W; -typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_W; -typedef SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA; -typedef PSP_DRVINFO_DATA_V2 PSP_DRVINFO_DATA; - -#endif // use current version of driver info data structure - -// -// Driver information details structure (provides detailed information about a -// particular driver information structure) -// -typedef struct _SP_DRVINFO_DETAIL_DATA_A { - DWORD cbSize; - FILETIME InfDate; - DWORD CompatIDsOffset; - DWORD CompatIDsLength; - ULONG_PTR Reserved; - CHAR SectionName[LINE_LEN]; - CHAR InfFileName[MAX_PATH]; - CHAR DrvDescription[LINE_LEN]; - CHAR HardwareID[ANYSIZE_ARRAY]; -} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A; - -typedef struct _SP_DRVINFO_DETAIL_DATA_W { - DWORD cbSize; - FILETIME InfDate; - DWORD CompatIDsOffset; - DWORD CompatIDsLength; - ULONG_PTR Reserved; - WCHAR SectionName[LINE_LEN]; - WCHAR InfFileName[MAX_PATH]; - WCHAR DrvDescription[LINE_LEN]; - WCHAR HardwareID[ANYSIZE_ARRAY]; -} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W; - -#ifdef UNICODE -typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA; -typedef PSP_DRVINFO_DETAIL_DATA_W PSP_DRVINFO_DETAIL_DATA; -#else -typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA; -typedef PSP_DRVINFO_DETAIL_DATA_A PSP_DRVINFO_DETAIL_DATA; -#endif - - -// -// Driver installation parameters (associated with a particular driver -// information element) -// -typedef struct _SP_DRVINSTALL_PARAMS { - DWORD cbSize; - DWORD Rank; - DWORD Flags; - DWORD_PTR PrivateData; - DWORD Reserved; -} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS; - -// -// SP_DRVINSTALL_PARAMS.Flags values -// -#define DNF_DUPDESC 0x00000001 // Multiple providers have same desc -#define DNF_OLDDRIVER 0x00000002 // Driver node specifies old/current driver -#define DNF_EXCLUDEFROMLIST 0x00000004 // If set, this driver node will not be - // displayed in any driver select dialogs. -#define DNF_NODRIVER 0x00000008 // if we want to install no driver - // (e.g no mouse drv) -#define DNF_LEGACYINF 0x00000010 // this driver node comes from an old-style INF -#define DNF_CLASS_DRIVER 0x00000020 // Driver node represents a class driver -#define DNF_COMPATIBLE_DRIVER 0x00000040 // Driver node represents a compatible driver -#define DNF_INET_DRIVER 0x00000080 // Driver comes from an internet source -#define DNF_UNUSED1 0x00000100 -#define DNF_INDEXED_DRIVER 0x00000200 // Driver is contained in the Windows Driver Index -#define DNF_OLD_INET_DRIVER 0x00000400 // Driver came from the Internet, but we don't currently - // have access to it's source files. Never attempt to - // install a driver with this flag! -#define DNF_BAD_DRIVER 0x00000800 // Driver node should not be used at all -#define DNF_DUPPROVIDER 0x00001000 // Multiple drivers have the same provider and desc - -// -//Rank values (the lower the Rank number, the better the Rank) -// -#define DRIVER_HARDWAREID_RANK 0x00000FFF // Any rank less than or equal to - // this value is a HardwareID match - -// -// Setup callback routine for comparing detection signatures -// -typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA NewDeviceData, - IN PSP_DEVINFO_DATA ExistingDeviceData, - IN PVOID CompareContext OPTIONAL - ); - - -// -// Define context structure handed to co-installers -// -typedef struct _COINSTALLER_CONTEXT_DATA { - BOOL PostProcessing; - DWORD InstallResult; - PVOID PrivateData; -} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA; - - -// -// Structure containing class image list information. -// -typedef struct _SP_CLASSIMAGELIST_DATA { - DWORD cbSize; - HIMAGELIST ImageList; - ULONG_PTR Reserved; -} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA; - - -// -// Structure to be passed as first parameter (LPVOID lpv) to ExtensionPropSheetPageProc -// entry point in setupapi.dll or to "EnumPropPages32" or "BasicProperties32" entry -// points provided by class/device property page providers. Used to retrieve a handle -// (or, potentially, multiple handles) to property pages for a specified property page type. -// -typedef struct _SP_PROPSHEETPAGE_REQUEST { - DWORD cbSize; - DWORD PageRequested; - HDEVINFO DeviceInfoSet; - PSP_DEVINFO_DATA DeviceInfoData; -} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST; - -// -// Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested -// -#define SPPSR_SELECT_DEVICE_RESOURCES 1 // supplied by setupapi.dll -#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2 // supplied by device's BasicProperties32 provider -#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES 3 // supplied by class and/or device's EnumPropPages32 provider - - -// -// Structure used with SetupGetBackupQueue -// -typedef struct _SP_BACKUP_QUEUE_PARAMS_A { - DWORD cbSize; - CHAR FullInfPath[MAX_PATH]; // buffer to hold ANSI pathname of INF file - INT FilenameOffset; // offset in CHAR's of filename part (after '\') -} SP_BACKUP_QUEUE_PARAMS_A, *PSP_BACKUP_QUEUE_PARAMS_A; - -typedef struct _SP_BACKUP_QUEUE_PARAMS_W { - DWORD cbSize; - WCHAR FullInfPath[MAX_PATH]; // buffer to hold UNICODE pathname of INF file - INT FilenameOffset; // offset in WCHAR's of filename part (after '\') -} SP_BACKUP_QUEUE_PARAMS_W, *PSP_BACKUP_QUEUE_PARAMS_W; - -#ifdef UNICODE -typedef SP_BACKUP_QUEUE_PARAMS_W SP_BACKUP_QUEUE_PARAMS; -typedef PSP_BACKUP_QUEUE_PARAMS_W PSP_BACKUP_QUEUE_PARAMS; -#else -typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS; -typedef PSP_BACKUP_QUEUE_PARAMS_A PSP_BACKUP_QUEUE_PARAMS; -#endif - -// -// Setupapi-specific error codes -// -// Inf parse outcomes -// -#define ERROR_EXPECTED_SECTION_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0) -#define ERROR_BAD_SECTION_NAME_LINE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1) -#define ERROR_SECTION_NAME_TOO_LONG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2) -#define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3) -// -// Inf runtime errors -// -#define ERROR_WRONG_INF_STYLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100) -#define ERROR_SECTION_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101) -#define ERROR_LINE_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102) -#define ERROR_NO_BACKUP (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103) -// -// Device Installer/other errors -// -#define ERROR_NO_ASSOCIATED_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200) -#define ERROR_CLASS_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201) -#define ERROR_DUPLICATE_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202) -#define ERROR_NO_DRIVER_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203) -#define ERROR_KEY_DOES_NOT_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204) -#define ERROR_INVALID_DEVINST_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205) -#define ERROR_INVALID_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206) -#define ERROR_DEVINST_ALREADY_EXISTS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207) -#define ERROR_DEVINFO_NOT_REGISTERED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208) -#define ERROR_INVALID_REG_PROPERTY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209) -#define ERROR_NO_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A) -#define ERROR_NO_SUCH_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B) -#define ERROR_CANT_LOAD_CLASS_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C) -#define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D) -#define ERROR_DI_DO_DEFAULT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E) -#define ERROR_DI_NOFILECOPY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F) -#define ERROR_INVALID_HWPROFILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210) -#define ERROR_NO_DEVICE_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211) -#define ERROR_DEVINFO_LIST_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212) -#define ERROR_DEVINFO_DATA_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213) -#define ERROR_DI_BAD_PATH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214) -#define ERROR_NO_CLASSINSTALL_PARAMS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215) -#define ERROR_FILEQUEUE_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216) -#define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217) -#define ERROR_NO_CLASS_DRIVER_LIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218) -#define ERROR_NO_ASSOCIATED_SERVICE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219) -#define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A) -#define ERROR_DEVICE_INTERFACE_ACTIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B) -#define ERROR_DEVICE_INTERFACE_REMOVED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C) -#define ERROR_BAD_INTERFACE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D) -#define ERROR_NO_SUCH_INTERFACE_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E) -#define ERROR_INVALID_REFERENCE_STRING (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F) -#define ERROR_INVALID_MACHINENAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220) -#define ERROR_REMOTE_COMM_FAILURE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221) -#define ERROR_MACHINE_UNAVAILABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222) -#define ERROR_NO_CONFIGMGR_SERVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223) -#define ERROR_INVALID_PROPPAGE_PROVIDER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224) -#define ERROR_NO_SUCH_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225) -#define ERROR_DI_POSTPROCESSING_REQUIRED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226) -#define ERROR_INVALID_COINSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227) -#define ERROR_NO_COMPAT_DRIVERS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228) -#define ERROR_NO_DEVICE_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229) -#define ERROR_INVALID_INF_LOGCONFIG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A) -#define ERROR_DI_DONT_INSTALL (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B) -#define ERROR_INVALID_FILTER_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C) -#define ERROR_NON_WINDOWS_NT_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D) -#define ERROR_NON_WINDOWS_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E) -#define ERROR_NO_CATALOG_FOR_OEM_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F) -#define ERROR_DEVINSTALL_QUEUE_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230) -#define ERROR_NOT_DISABLEABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231) -#define ERROR_CANT_REMOVE_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232) - -// -// Backward compatibility--do not use. -// -#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE -#define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE -#define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED -#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE - - -// -// Win9x migration DLL error code -// -#define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000) - - -WINSETUPAPI -BOOL -WINAPI -SetupGetInfInformationA( - IN LPCVOID InfSpec, - IN DWORD SearchControl, - OUT PSP_INF_INFORMATION ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetInfInformationW( - IN LPCVOID InfSpec, - IN DWORD SearchControl, - OUT PSP_INF_INFORMATION ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -// -// SearchControl flags for SetupGetInfInformation -// -#define INFINFO_INF_SPEC_IS_HINF 1 -#define INFINFO_INF_NAME_IS_ABSOLUTE 2 -#define INFINFO_DEFAULT_SEARCH 3 -#define INFINFO_REVERSE_DEFAULT_SEARCH 4 -#define INFINFO_INF_PATH_LIST_SEARCH 5 - -#ifdef UNICODE -#define SetupGetInfInformation SetupGetInfInformationW -#else -#define SetupGetInfInformation SetupGetInfInformationA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueryInfFileInformationA( - IN PSP_INF_INFORMATION InfInformation, - IN UINT InfIndex, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueryInfFileInformationW( - IN PSP_INF_INFORMATION InfInformation, - IN UINT InfIndex, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupQueryInfFileInformation SetupQueryInfFileInformationW -#else -#define SetupQueryInfFileInformation SetupQueryInfFileInformationA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueryInfOriginalFileInformationA( - IN PSP_INF_INFORMATION InfInformation, - IN UINT InfIndex, - IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo, OPTIONAL - OUT PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueryInfOriginalFileInformationW( - IN PSP_INF_INFORMATION InfInformation, - IN UINT InfIndex, - IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo, OPTIONAL - OUT PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo - ); - -#ifdef UNICODE -#define SetupQueryInfOriginalFileInformation SetupQueryInfOriginalFileInformationW -#else -#define SetupQueryInfOriginalFileInformation SetupQueryInfOriginalFileInformationA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueryInfVersionInformationA( - IN PSP_INF_INFORMATION InfInformation, - IN UINT InfIndex, - IN PCSTR Key, OPTIONAL - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueryInfVersionInformationW( - IN PSP_INF_INFORMATION InfInformation, - IN UINT InfIndex, - IN PCWSTR Key, OPTIONAL - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW -#else -#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetInfFileListA( - IN PCSTR DirectoryPath, OPTIONAL - IN DWORD InfStyle, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetInfFileListW( - IN PCWSTR DirectoryPath, OPTIONAL - IN DWORD InfStyle, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetInfFileList SetupGetInfFileListW -#else -#define SetupGetInfFileList SetupGetInfFileListA -#endif - - -WINSETUPAPI -HINF -WINAPI -SetupOpenInfFileW( - IN PCWSTR FileName, - IN PCWSTR InfClass, OPTIONAL - IN DWORD InfStyle, - OUT PUINT ErrorLine OPTIONAL - ); - -WINSETUPAPI -HINF -WINAPI -SetupOpenInfFileA( - IN PCSTR FileName, - IN PCSTR InfClass, OPTIONAL - IN DWORD InfStyle, - OUT PUINT ErrorLine OPTIONAL - ); - -#ifdef UNICODE -#define SetupOpenInfFile SetupOpenInfFileW -#else -#define SetupOpenInfFile SetupOpenInfFileA -#endif - - -WINSETUPAPI -HINF -WINAPI -SetupOpenMasterInf( - VOID - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupOpenAppendInfFileW( - IN PCWSTR FileName, OPTIONAL - IN HINF InfHandle, - OUT PUINT ErrorLine OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupOpenAppendInfFileA( - IN PCSTR FileName, OPTIONAL - IN HINF InfHandle, - OUT PUINT ErrorLine OPTIONAL - ); - -#ifdef UNICODE -#define SetupOpenAppendInfFile SetupOpenAppendInfFileW -#else -#define SetupOpenAppendInfFile SetupOpenAppendInfFileA -#endif - - -WINSETUPAPI -VOID -WINAPI -SetupCloseInfFile( - IN HINF InfHandle - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupFindFirstLineA( - IN HINF InfHandle, - IN PCSTR Section, - IN PCSTR Key, OPTIONAL - OUT PINFCONTEXT Context - ); - -WINSETUPAPI -BOOL -WINAPI -SetupFindFirstLineW( - IN HINF InfHandle, - IN PCWSTR Section, - IN PCWSTR Key, OPTIONAL - OUT PINFCONTEXT Context - ); - -#ifdef UNICODE -#define SetupFindFirstLine SetupFindFirstLineW -#else -#define SetupFindFirstLine SetupFindFirstLineA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupFindNextLine( - IN PINFCONTEXT ContextIn, - OUT PINFCONTEXT ContextOut - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupFindNextMatchLineA( - IN PINFCONTEXT ContextIn, - IN PCSTR Key, OPTIONAL - OUT PINFCONTEXT ContextOut - ); - -WINSETUPAPI -BOOL -WINAPI -SetupFindNextMatchLineW( - IN PINFCONTEXT ContextIn, - IN PCWSTR Key, OPTIONAL - OUT PINFCONTEXT ContextOut - ); - -#ifdef UNICODE -#define SetupFindNextMatchLine SetupFindNextMatchLineW -#else -#define SetupFindNextMatchLine SetupFindNextMatchLineA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetLineByIndexA( - IN HINF InfHandle, - IN PCSTR Section, - IN DWORD Index, - OUT PINFCONTEXT Context - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetLineByIndexW( - IN HINF InfHandle, - IN PCWSTR Section, - IN DWORD Index, - OUT PINFCONTEXT Context - ); - -#ifdef UNICODE -#define SetupGetLineByIndex SetupGetLineByIndexW -#else -#define SetupGetLineByIndex SetupGetLineByIndexA -#endif - - -WINSETUPAPI -LONG -WINAPI -SetupGetLineCountA( - IN HINF InfHandle, - IN PCSTR Section - ); - -WINSETUPAPI -LONG -WINAPI -SetupGetLineCountW( - IN HINF InfHandle, - IN PCWSTR Section - ); - -#ifdef UNICODE -#define SetupGetLineCount SetupGetLineCountW -#else -#define SetupGetLineCount SetupGetLineCountA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetLineTextA( - IN PINFCONTEXT Context, OPTIONAL - IN HINF InfHandle, OPTIONAL - IN PCSTR Section, OPTIONAL - IN PCSTR Key, OPTIONAL - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetLineTextW( - IN PINFCONTEXT Context, OPTIONAL - IN HINF InfHandle, OPTIONAL - IN PCWSTR Section, OPTIONAL - IN PCWSTR Key, OPTIONAL - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetLineText SetupGetLineTextW -#else -#define SetupGetLineText SetupGetLineTextA -#endif - - -WINSETUPAPI -DWORD -WINAPI -SetupGetFieldCount( - IN PINFCONTEXT Context - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupGetStringFieldA( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetStringFieldW( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetStringField SetupGetStringFieldW -#else -#define SetupGetStringField SetupGetStringFieldA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetIntField( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PINT IntegerValue - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupGetMultiSzFieldA( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT LPDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetMultiSzFieldW( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT LPDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetMultiSzField SetupGetMultiSzFieldW -#else -#define SetupGetMultiSzField SetupGetMultiSzFieldA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetBinaryField( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PBYTE ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT LPDWORD RequiredSize OPTIONAL - ); - - -WINSETUPAPI -DWORD -WINAPI -SetupGetFileCompressionInfoA( - IN PCSTR SourceFileName, - OUT PSTR *ActualSourceFileName, - OUT PDWORD SourceFileSize, - OUT PDWORD TargetFileSize, - OUT PUINT CompressionType - ); - -WINSETUPAPI -DWORD -WINAPI -SetupGetFileCompressionInfoW( - IN PCWSTR SourceFileName, - OUT PWSTR *ActualSourceFileName, - OUT PDWORD SourceFileSize, - OUT PDWORD TargetFileSize, - OUT PUINT CompressionType - ); - -#ifdef UNICODE -#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW -#else -#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA -#endif - - -// -// Compression types -// -#define FILE_COMPRESSION_NONE 0 -#define FILE_COMPRESSION_WINLZA 1 -#define FILE_COMPRESSION_MSZIP 2 -#define FILE_COMPRESSION_NTCAB 3 - - -WINSETUPAPI -DWORD -WINAPI -SetupDecompressOrCopyFileA( - IN PCSTR SourceFileName, - IN PCSTR TargetFileName, - IN PUINT CompressionType OPTIONAL - ); - -WINSETUPAPI -DWORD -WINAPI -SetupDecompressOrCopyFileW( - IN PCWSTR SourceFileName, - IN PCWSTR TargetFileName, - IN PUINT CompressionType OPTIONAL - ); - -#ifdef UNICODE -#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW -#else -#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetSourceFileLocationA( - IN HINF InfHandle, - IN PINFCONTEXT InfContext, OPTIONAL - IN PCSTR FileName, OPTIONAL - OUT PUINT SourceId, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetSourceFileLocationW( - IN HINF InfHandle, - IN PINFCONTEXT InfContext, OPTIONAL - IN PCWSTR FileName, OPTIONAL - OUT PUINT SourceId, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetSourceFileLocation SetupGetSourceFileLocationW -#else -#define SetupGetSourceFileLocation SetupGetSourceFileLocationA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetSourceFileSizeA( - IN HINF InfHandle, - IN PINFCONTEXT InfContext, OPTIONAL - IN PCSTR FileName, OPTIONAL - IN PCSTR Section, OPTIONAL - OUT PDWORD FileSize, - IN UINT RoundingFactor OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetSourceFileSizeW( - IN HINF InfHandle, - IN PINFCONTEXT InfContext, OPTIONAL - IN PCWSTR FileName, OPTIONAL - IN PCWSTR Section, OPTIONAL - OUT PDWORD FileSize, - IN UINT RoundingFactor OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetSourceFileSize SetupGetSourceFileSizeW -#else -#define SetupGetSourceFileSize SetupGetSourceFileSizeA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupGetTargetPathA( - IN HINF InfHandle, - IN PINFCONTEXT InfContext, OPTIONAL - IN PCSTR Section, OPTIONAL - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetTargetPathW( - IN HINF InfHandle, - IN PINFCONTEXT InfContext, OPTIONAL - IN PCWSTR Section, OPTIONAL - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetTargetPath SetupGetTargetPathW -#else -#define SetupGetTargetPath SetupGetTargetPathA -#endif - - -// -// Define flags for SourceList APIs. -// -#define SRCLIST_TEMPORARY 0x00000001 -#define SRCLIST_NOBROWSE 0x00000002 -#define SRCLIST_SYSTEM 0x00000010 -#define SRCLIST_USER 0x00000020 -#define SRCLIST_SYSIFADMIN 0x00000040 -#define SRCLIST_SUBDIRS 0x00000100 -#define SRCLIST_APPEND 0x00000200 -#define SRCLIST_NOSTRIPPLATFORM 0x00000400 - - -WINSETUPAPI -BOOL -WINAPI -SetupSetSourceListA( - IN DWORD Flags, - IN PCSTR *SourceList, - IN UINT SourceCount - ); - -WINSETUPAPI -BOOL -WINAPI -SetupSetSourceListW( - IN DWORD Flags, - IN PCWSTR *SourceList, - IN UINT SourceCount - ); - -#ifdef UNICODE -#define SetupSetSourceList SetupSetSourceListW -#else -#define SetupSetSourceList SetupSetSourceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupCancelTemporarySourceList( - VOID - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupAddToSourceListA( - IN DWORD Flags, - IN PCSTR Source - ); - -WINSETUPAPI -BOOL -WINAPI -SetupAddToSourceListW( - IN DWORD Flags, - IN PCWSTR Source - ); - -#ifdef UNICODE -#define SetupAddToSourceList SetupAddToSourceListW -#else -#define SetupAddToSourceList SetupAddToSourceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveFromSourceListA( - IN DWORD Flags, - IN PCSTR Source - ); - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveFromSourceListW( - IN DWORD Flags, - IN PCWSTR Source - ); - -#ifdef UNICODE -#define SetupRemoveFromSourceList SetupRemoveFromSourceListW -#else -#define SetupRemoveFromSourceList SetupRemoveFromSourceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQuerySourceListA( - IN DWORD Flags, - OUT PCSTR **List, - OUT PUINT Count - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQuerySourceListW( - IN DWORD Flags, - OUT PCWSTR **List, - OUT PUINT Count - ); - -#ifdef UNICODE -#define SetupQuerySourceList SetupQuerySourceListW -#else -#define SetupQuerySourceList SetupQuerySourceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupFreeSourceListA( - IN OUT PCSTR **List, - IN UINT Count - ); - -WINSETUPAPI -BOOL -WINAPI -SetupFreeSourceListW( - IN OUT PCWSTR **List, - IN UINT Count - ); - -#ifdef UNICODE -#define SetupFreeSourceList SetupFreeSourceListW -#else -#define SetupFreeSourceList SetupFreeSourceListA -#endif - - -WINSETUPAPI -UINT -WINAPI -SetupPromptForDiskA( - IN HWND hwndParent, - IN PCSTR DialogTitle, OPTIONAL - IN PCSTR DiskName, OPTIONAL - IN PCSTR PathToSource, OPTIONAL - IN PCSTR FileSought, - IN PCSTR TagFile, OPTIONAL - IN DWORD DiskPromptStyle, - OUT PSTR PathBuffer, - IN DWORD PathBufferSize, - OUT PDWORD PathRequiredSize - ); - -WINSETUPAPI -UINT -WINAPI -SetupPromptForDiskW( - IN HWND hwndParent, - IN PCWSTR DialogTitle, OPTIONAL - IN PCWSTR DiskName, OPTIONAL - IN PCWSTR PathToSource, OPTIONAL - IN PCWSTR FileSought, - IN PCWSTR TagFile, OPTIONAL - IN DWORD DiskPromptStyle, - OUT PWSTR PathBuffer, - IN DWORD PathBufferSize, - OUT PDWORD PathRequiredSize - ); - -#ifdef UNICODE -#define SetupPromptForDisk SetupPromptForDiskW -#else -#define SetupPromptForDisk SetupPromptForDiskA -#endif - - -WINSETUPAPI -UINT -WINAPI -SetupCopyErrorA( - IN HWND hwndParent, - IN PCSTR DialogTitle, OPTIONAL - IN PCSTR DiskName, OPTIONAL - IN PCSTR PathToSource, - IN PCSTR SourceFile, - IN PCSTR TargetPathFile, OPTIONAL - IN UINT Win32ErrorCode, - IN DWORD Style, - OUT PSTR PathBuffer, OPTIONAL - IN DWORD PathBufferSize, - OUT PDWORD PathRequiredSize OPTIONAL - ); - -WINSETUPAPI -UINT -WINAPI -SetupCopyErrorW( - IN HWND hwndParent, - IN PCWSTR DialogTitle, OPTIONAL - IN PCWSTR DiskName, OPTIONAL - IN PCWSTR PathToSource, - IN PCWSTR SourceFile, - IN PCWSTR TargetPathFile, OPTIONAL - IN UINT Win32ErrorCode, - IN DWORD Style, - OUT PWSTR PathBuffer, OPTIONAL - IN DWORD PathBufferSize, - OUT PDWORD PathRequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupCopyError SetupCopyErrorW -#else -#define SetupCopyError SetupCopyErrorA -#endif - - -WINSETUPAPI -UINT -WINAPI -SetupRenameErrorA( - IN HWND hwndParent, - IN PCSTR DialogTitle, OPTIONAL - IN PCSTR SourceFile, - IN PCSTR TargetFile, - IN UINT Win32ErrorCode, - IN DWORD Style - ); - -WINSETUPAPI -UINT -WINAPI -SetupRenameErrorW( - IN HWND hwndParent, - IN PCWSTR DialogTitle, OPTIONAL - IN PCWSTR SourceFile, - IN PCWSTR TargetFile, - IN UINT Win32ErrorCode, - IN DWORD Style - ); - -#ifdef UNICODE -#define SetupRenameError SetupRenameErrorW -#else -#define SetupRenameError SetupRenameErrorA -#endif - - -WINSETUPAPI -UINT -WINAPI -SetupDeleteErrorA( - IN HWND hwndParent, - IN PCSTR DialogTitle, OPTIONAL - IN PCSTR File, - IN UINT Win32ErrorCode, - IN DWORD Style - ); - -WINSETUPAPI -UINT -WINAPI -SetupDeleteErrorW( - IN HWND hwndParent, - IN PCWSTR DialogTitle, OPTIONAL - IN PCWSTR File, - IN UINT Win32ErrorCode, - IN DWORD Style - ); - -#ifdef UNICODE -#define SetupDeleteError SetupDeleteErrorW -#else -#define SetupDeleteError SetupDeleteErrorA -#endif - -WINSETUPAPI -UINT -WINAPI -SetupBackupErrorA( - IN HWND hwndParent, - IN PCSTR DialogTitle, OPTIONAL - IN PCSTR BackupFile, - IN PCSTR TargetFile, - IN UINT Win32ErrorCode, - IN DWORD Style - ); - -WINSETUPAPI -UINT -WINAPI -SetupBackupErrorW( - IN HWND hwndParent, - IN PCWSTR DialogTitle, OPTIONAL - IN PCWSTR BackupFile, - IN PCWSTR TargetFile, - IN UINT Win32ErrorCode, - IN DWORD Style - ); - -#ifdef UNICODE -#define SetupBackupError SetupBackupErrorW -#else -#define SetupBackupError SetupBackupErrorA -#endif - - -// -// Styles for SetupPromptForDisk, SetupCopyError, -// SetupRenameError, SetupDeleteError -// -#define IDF_NOBROWSE 0x00000001 -#define IDF_NOSKIP 0x00000002 -#define IDF_NODETAILS 0x00000004 -#define IDF_NOCOMPRESSED 0x00000008 -#define IDF_CHECKFIRST 0x00000100 -#define IDF_NOBEEP 0x00000200 -#define IDF_NOFOREGROUND 0x00000400 -#define IDF_WARNIFSKIP 0x00000800 -#define IDF_OEMDISK 0x80000000 - -// -// Return values for SetupPromptForDisk, SetupCopyError, -// SetupRenameError, SetupDeleteError, SetupBackupError -// -#define DPROMPT_SUCCESS 0 -#define DPROMPT_CANCEL 1 -#define DPROMPT_SKIPFILE 2 -#define DPROMPT_BUFFERTOOSMALL 3 -#define DPROMPT_OUTOFMEMORY 4 - - -WINSETUPAPI -BOOL -WINAPI -SetupSetDirectoryIdA( - IN HINF InfHandle, - IN DWORD Id, OPTIONAL - IN PCSTR Directory OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupSetDirectoryIdW( - IN HINF InfHandle, - IN DWORD Id, OPTIONAL - IN PCWSTR Directory OPTIONAL - ); - -#ifdef UNICODE -#define SetupSetDirectoryId SetupSetDirectoryIdW -#else -#define SetupSetDirectoryId SetupSetDirectoryIdA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupSetDirectoryIdExA( - IN HINF InfHandle, - IN DWORD Id, OPTIONAL - IN PCSTR Directory, OPTIONAL - IN DWORD Flags, - IN DWORD Reserved1, - IN PVOID Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupSetDirectoryIdExW( - IN HINF InfHandle, - IN DWORD Id, OPTIONAL - IN PCWSTR Directory, OPTIONAL - IN DWORD Flags, - IN DWORD Reserved1, - IN PVOID Reserved2 - ); - -#ifdef UNICODE -#define SetupSetDirectoryIdEx SetupSetDirectoryIdExW -#else -#define SetupSetDirectoryIdEx SetupSetDirectoryIdExA -#endif - -// -// Flags for SetupSetDirectoryIdEx -// -#define SETDIRID_NOT_FULL_PATH 0x00000001 - - -WINSETUPAPI -BOOL -WINAPI -SetupGetSourceInfoA( - IN HINF InfHandle, - IN UINT SourceId, - IN UINT InfoDesired, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetSourceInfoW( - IN HINF InfHandle, - IN UINT SourceId, - IN UINT InfoDesired, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupGetSourceInfo SetupGetSourceInfoW -#else -#define SetupGetSourceInfo SetupGetSourceInfoA -#endif - -// -// InfoDesired values for SetupGetSourceInfo -// - -#define SRCINFO_PATH 1 -#define SRCINFO_TAGFILE 2 -#define SRCINFO_DESCRIPTION 3 -#define SRCINFO_FLAGS 4 - - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFileA( - IN HINF InfHandle, OPTIONAL - IN PINFCONTEXT InfContext, OPTIONAL - IN PCSTR SourceFile, OPTIONAL - IN PCSTR SourcePathRoot, OPTIONAL - IN PCSTR DestinationName, OPTIONAL - IN DWORD CopyStyle, - IN PSP_FILE_CALLBACK_A CopyMsgHandler, OPTIONAL - IN PVOID Context OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFileW( - IN HINF InfHandle, OPTIONAL - IN PINFCONTEXT InfContext, OPTIONAL - IN PCWSTR SourceFile, OPTIONAL - IN PCWSTR SourcePathRoot, OPTIONAL - IN PCWSTR DestinationName, OPTIONAL - IN DWORD CopyStyle, - IN PSP_FILE_CALLBACK_W CopyMsgHandler, OPTIONAL - IN PVOID Context OPTIONAL - ); - -#ifdef UNICODE -#define SetupInstallFile SetupInstallFileW -#else -#define SetupInstallFile SetupInstallFileA -#endif - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFileExA( - IN HINF InfHandle, OPTIONAL - IN PINFCONTEXT InfContext, OPTIONAL - IN PCSTR SourceFile, OPTIONAL - IN PCSTR SourcePathRoot, OPTIONAL - IN PCSTR DestinationName, OPTIONAL - IN DWORD CopyStyle, - IN PSP_FILE_CALLBACK_A CopyMsgHandler, OPTIONAL - IN PVOID Context, OPTIONAL - OUT PBOOL FileWasInUse - ); - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFileExW( - IN HINF InfHandle, OPTIONAL - IN PINFCONTEXT InfContext, OPTIONAL - IN PCWSTR SourceFile, OPTIONAL - IN PCWSTR SourcePathRoot, OPTIONAL - IN PCWSTR DestinationName, OPTIONAL - IN DWORD CopyStyle, - IN PSP_FILE_CALLBACK_W CopyMsgHandler, OPTIONAL - IN PVOID Context, OPTIONAL - OUT PBOOL FileWasInUse - ); - -#ifdef UNICODE -#define SetupInstallFileEx SetupInstallFileExW -#else -#define SetupInstallFileEx SetupInstallFileExA -#endif - -// -// CopyStyle values for copy and queue-related APIs -// -#define SP_COPY_DELETESOURCE 0x0000001 // delete source file on successful copy -#define SP_COPY_REPLACEONLY 0x0000002 // copy only if target file already present -#define SP_COPY_NEWER 0x0000004 // copy only if source newer than or same as target -#define SP_COPY_NEWER_OR_SAME SP_COPY_NEWER -#define SP_COPY_NOOVERWRITE 0x0000008 // copy only if target doesn't exist -#define SP_COPY_NODECOMP 0x0000010 // don't decompress source file while copying -#define SP_COPY_LANGUAGEAWARE 0x0000020 // don't overwrite file of different language -#define SP_COPY_SOURCE_ABSOLUTE 0x0000040 // SourceFile is a full source path -#define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080 // SourcePathRoot is the full path -#define SP_COPY_IN_USE_NEEDS_REBOOT 0x0000100 // System needs reboot if file in use -#define SP_COPY_FORCE_IN_USE 0x0000200 // Force target-in-use behavior -#define SP_COPY_NOSKIP 0x0000400 // Skip is disallowed for this file or section -#define SP_FLAG_CABINETCONTINUATION 0x0000800 // Used with need media notification -#define SP_COPY_FORCE_NOOVERWRITE 0x0001000 // like NOOVERWRITE but no callback nofitication -#define SP_COPY_FORCE_NEWER 0x0002000 // like NEWER but no callback nofitication -#define SP_COPY_WARNIFSKIP 0x0004000 // system critical file: warn if user tries to skip -#define SP_COPY_NOBROWSE 0x0008000 // Browsing is disallowed for this file or section -#define SP_COPY_NEWER_ONLY 0x0010000 // copy only if source file newer than target -#define SP_COPY_SOURCE_SIS_MASTER 0x0020000 // source is single-instance store master -#define SP_COPY_OEMINF_CATALOG_ONLY 0x0040000 // (SetupCopyOEMInf only) don't copy INF--just catalog -#define SP_COPY_REPLACE_BOOT_FILE 0x0080000 // file must be present upon reboot (i.e., it's - // needed by the loader); this flag implies a reboot -#define SP_COPY_NOPRUNE 0x0100000 // never prune this file - - -WINSETUPAPI -HSPFILEQ -WINAPI -SetupOpenFileQueue( - VOID - ); - -WINSETUPAPI -BOOL -WINAPI -SetupCloseFileQueue( - IN HSPFILEQ QueueHandle - ); - -WINSETUPAPI -BOOL -WINAPI -SetupSetFileQueueAlternatePlatformA( - IN HSPFILEQ QueueHandle, - IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo, OPTIONAL - IN PCSTR AlternateDefaultCatalogFile OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupSetFileQueueAlternatePlatformW( - IN HSPFILEQ QueueHandle, - IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo, OPTIONAL - IN PCWSTR AlternateDefaultCatalogFile OPTIONAL - ); - -#ifdef UNICODE -#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformW -#else -#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupSetPlatformPathOverrideA( - IN PCSTR Override OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupSetPlatformPathOverrideW( - IN PCWSTR Override OPTIONAL - ); - -#ifdef UNICODE -#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW -#else -#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueCopyA( - IN HSPFILEQ QueueHandle, - IN PCSTR SourceRootPath, OPTIONAL - IN PCSTR SourcePath, OPTIONAL - IN PCSTR SourceFilename, - IN PCSTR SourceDescription, OPTIONAL - IN PCSTR SourceTagfile, OPTIONAL - IN PCSTR TargetDirectory, - IN PCSTR TargetFilename, OPTIONAL - IN DWORD CopyStyle - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueCopyW( - IN HSPFILEQ QueueHandle, - IN PCWSTR SourceRootPath, OPTIONAL - IN PCWSTR SourcePath, OPTIONAL - IN PCWSTR SourceFilename, - IN PCWSTR SourceDescription, OPTIONAL - IN PCWSTR SourceTagfile, OPTIONAL - IN PCWSTR TargetDirectory, - IN PCWSTR TargetFilename, OPTIONAL - IN DWORD CopyStyle - ); - -#ifdef UNICODE -#define SetupQueueCopy SetupQueueCopyW -#else -#define SetupQueueCopy SetupQueueCopyA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueCopyIndirectA( - IN PSP_FILE_COPY_PARAMS_A CopyParams - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueCopyIndirectW( - IN PSP_FILE_COPY_PARAMS_W CopyParams - ); - -#ifdef UNICODE -#define SetupQueueCopyIndirect SetupQueueCopyIndirectW -#else -#define SetupQueueCopyIndirect SetupQueueCopyIndirectA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueDefaultCopyA( - IN HSPFILEQ QueueHandle, - IN HINF InfHandle, - IN PCSTR SourceRootPath, - IN PCSTR SourceFilename, - IN PCSTR TargetFilename, - IN DWORD CopyStyle - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueDefaultCopyW( - IN HSPFILEQ QueueHandle, - IN HINF InfHandle, - IN PCWSTR SourceRootPath, - IN PCWSTR SourceFilename, - IN PCWSTR TargetFilename, - IN DWORD CopyStyle - ); - -#ifdef UNICODE -#define SetupQueueDefaultCopy SetupQueueDefaultCopyW -#else -#define SetupQueueDefaultCopy SetupQueueDefaultCopyA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueCopySectionA( - IN HSPFILEQ QueueHandle, - IN PCSTR SourceRootPath, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCSTR Section, - IN DWORD CopyStyle - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueCopySectionW( - IN HSPFILEQ QueueHandle, - IN PCWSTR SourceRootPath, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCWSTR Section, - IN DWORD CopyStyle - ); - -#ifdef UNICODE -#define SetupQueueCopySection SetupQueueCopySectionW -#else -#define SetupQueueCopySection SetupQueueCopySectionA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueDeleteA( - IN HSPFILEQ QueueHandle, - IN PCSTR PathPart1, - IN PCSTR PathPart2 OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueDeleteW( - IN HSPFILEQ QueueHandle, - IN PCWSTR PathPart1, - IN PCWSTR PathPart2 OPTIONAL - ); - -#ifdef UNICODE -#define SetupQueueDelete SetupQueueDeleteW -#else -#define SetupQueueDelete SetupQueueDeleteA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueDeleteSectionA( - IN HSPFILEQ QueueHandle, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCSTR Section - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueDeleteSectionW( - IN HSPFILEQ QueueHandle, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCWSTR Section - ); - -#ifdef UNICODE -#define SetupQueueDeleteSection SetupQueueDeleteSectionW -#else -#define SetupQueueDeleteSection SetupQueueDeleteSectionA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueRenameA( - IN HSPFILEQ QueueHandle, - IN PCSTR SourcePath, - IN PCSTR SourceFilename, OPTIONAL - IN PCSTR TargetPath, OPTIONAL - IN PCSTR TargetFilename - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueRenameW( - IN HSPFILEQ QueueHandle, - IN PCWSTR SourcePath, - IN PCWSTR SourceFilename, OPTIONAL - IN PCWSTR TargetPath, OPTIONAL - IN PCWSTR TargetFilename - ); - -#ifdef UNICODE -#define SetupQueueRename SetupQueueRenameW -#else -#define SetupQueueRename SetupQueueRenameA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQueueRenameSectionA( - IN HSPFILEQ QueueHandle, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCSTR Section - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueueRenameSectionW( - IN HSPFILEQ QueueHandle, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCWSTR Section - ); - -#ifdef UNICODE -#define SetupQueueRenameSection SetupQueueRenameSectionW -#else -#define SetupQueueRenameSection SetupQueueRenameSectionA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupCommitFileQueueA( - IN HWND Owner, OPTIONAL - IN HSPFILEQ QueueHandle, - IN PSP_FILE_CALLBACK_A MsgHandler, - IN PVOID Context - ); - -WINSETUPAPI -BOOL -WINAPI -SetupCommitFileQueueW( - IN HWND Owner, OPTIONAL - IN HSPFILEQ QueueHandle, - IN PSP_FILE_CALLBACK_W MsgHandler, - IN PVOID Context - ); - -#ifdef UNICODE -#define SetupCommitFileQueue SetupCommitFileQueueW -#else -#define SetupCommitFileQueue SetupCommitFileQueueA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupScanFileQueueA( - IN HSPFILEQ FileQueue, - IN DWORD Flags, - IN HWND Window, OPTIONAL - IN PSP_FILE_CALLBACK_A CallbackRoutine, OPTIONAL - IN PVOID CallbackContext, OPTIONAL - OUT PDWORD Result - ); - -WINSETUPAPI -BOOL -WINAPI -SetupScanFileQueueW( - IN HSPFILEQ FileQueue, - IN DWORD Flags, - IN HWND Window, OPTIONAL - IN PSP_FILE_CALLBACK_W CallbackRoutine, OPTIONAL - IN PVOID CallbackContext, OPTIONAL - OUT PDWORD Result - ); - -#ifdef UNICODE -#define SetupScanFileQueue SetupScanFileQueueW -#else -#define SetupScanFileQueue SetupScanFileQueueA -#endif - -// -// Define flags for SetupScanFileQueue. -// -#define SPQ_SCAN_FILE_PRESENCE 0x00000001 -#define SPQ_SCAN_FILE_VALIDITY 0x00000002 -#define SPQ_SCAN_USE_CALLBACK 0x00000004 -#define SPQ_SCAN_USE_CALLBACKEX 0x00000008 -#define SPQ_SCAN_INFORM_USER 0x00000010 -#define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020 - -// -// Define flags used with Param2 for SPFILENOTIFY_QUEUESCAN -// -#define SPQ_DELAYED_COPY 0x00000001 // file was in use; registered for delayed copy - - -// -// Define OEM Source Type values for use in SetupCopyOEMInf. -// -#define SPOST_NONE 0 -#define SPOST_PATH 1 -#define SPOST_URL 2 -#define SPOST_MAX 3 - -WINSETUPAPI -BOOL -WINAPI -SetupCopyOEMInfA( - IN PCSTR SourceInfFileName, - IN PCSTR OEMSourceMediaLocation, OPTIONAL - IN DWORD OEMSourceMediaType, - IN DWORD CopyStyle, - OUT PSTR DestinationInfFileName, OPTIONAL - IN DWORD DestinationInfFileNameSize, - OUT PDWORD RequiredSize, OPTIONAL - OUT PSTR *DestinationInfFileNameComponent OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupCopyOEMInfW( - IN PCWSTR SourceInfFileName, - IN PCWSTR OEMSourceMediaLocation, OPTIONAL - IN DWORD OEMSourceMediaType, - IN DWORD CopyStyle, - OUT PWSTR DestinationInfFileName, OPTIONAL - IN DWORD DestinationInfFileNameSize, - OUT PDWORD RequiredSize, OPTIONAL - OUT PWSTR *DestinationInfFileNameComponent OPTIONAL - ); - -#ifdef UNICODE -#define SetupCopyOEMInf SetupCopyOEMInfW -#else -#define SetupCopyOEMInf SetupCopyOEMInfA -#endif - - -// -// Disk space list APIs -// -WINSETUPAPI -HDSKSPC -WINAPI -SetupCreateDiskSpaceListA( - IN PVOID Reserved1, - IN DWORD Reserved2, - IN UINT Flags - ); - -WINSETUPAPI -HDSKSPC -WINAPI -SetupCreateDiskSpaceListW( - IN PVOID Reserved1, - IN DWORD Reserved2, - IN UINT Flags - ); - -#ifdef UNICODE -#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListW -#else -#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListA -#endif - -// -// Flags for SetupCreateDiskSpaceList -// -#define SPDSL_IGNORE_DISK 0x00000001 // ignore deletes and on-disk files in copies -#define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002 - - -WINSETUPAPI -HDSKSPC -WINAPI -SetupDuplicateDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN PVOID Reserved1, - IN DWORD Reserved2, - IN UINT Flags - ); - -WINSETUPAPI -HDSKSPC -WINAPI -SetupDuplicateDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN PVOID Reserved1, - IN DWORD Reserved2, - IN UINT Flags - ); - -#ifdef UNICODE -#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListW -#else -#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDestroyDiskSpaceList( - IN OUT HDSKSPC DiskSpace - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupQueryDrivesInDiskSpaceListA( - IN HDSKSPC DiskSpace, - OUT PSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueryDrivesInDiskSpaceListW( - IN HDSKSPC DiskSpace, - OUT PWSTR ReturnBuffer, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListW -#else -#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupQuerySpaceRequiredOnDriveA( - IN HDSKSPC DiskSpace, - IN PCSTR DriveSpec, - OUT LONGLONG *SpaceRequired, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQuerySpaceRequiredOnDriveW( - IN HDSKSPC DiskSpace, - IN PCWSTR DriveSpec, - OUT LONGLONG *SpaceRequired, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveW -#else -#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupAdjustDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN LPCSTR DriveRoot, - IN LONGLONG Amount, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupAdjustDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN LPCWSTR DriveRoot, - IN LONGLONG Amount, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListW -#else -#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupAddToDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN PCSTR TargetFilespec, - IN LONGLONG FileSize, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupAddToDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN PCWSTR TargetFilespec, - IN LONGLONG FileSize, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListW -#else -#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupAddSectionToDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCSTR SectionName, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupAddSectionToDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCWSTR SectionName, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListW -#else -#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupAddInstallSectionToDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF LayoutInfHandle, OPTIONAL - IN PCSTR SectionName, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupAddInstallSectionToDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF LayoutInfHandle, OPTIONAL - IN PCWSTR SectionName, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListW -#else -#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveFromDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN PCSTR TargetFilespec, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveFromDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN PCWSTR TargetFilespec, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListW -#else -#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveSectionFromDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCSTR SectionName, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveSectionFromDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF ListInfHandle, OPTIONAL - IN PCWSTR SectionName, - IN UINT Operation, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListW -#else -#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveInstallSectionFromDiskSpaceListA( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF LayoutInfHandle, OPTIONAL - IN PCSTR SectionName, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveInstallSectionFromDiskSpaceListW( - IN HDSKSPC DiskSpace, - IN HINF InfHandle, - IN HINF LayoutInfHandle, OPTIONAL - IN PCWSTR SectionName, - IN PVOID Reserved1, - IN UINT Reserved2 - ); - -#ifdef UNICODE -#define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListW -#else -#define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListA -#endif - - -// -// Cabinet APIs -// - -WINSETUPAPI -BOOL -WINAPI -SetupIterateCabinetA( - IN PCSTR CabinetFile, - IN DWORD Reserved, - IN PSP_FILE_CALLBACK_A MsgHandler, - IN PVOID Context - ); - -WINSETUPAPI -BOOL -WINAPI -SetupIterateCabinetW( - IN PCWSTR CabinetFile, - IN DWORD Reserved, - IN PSP_FILE_CALLBACK_W MsgHandler, - IN PVOID Context - ); - -#ifdef UNICODE -#define SetupIterateCabinet SetupIterateCabinetW -#else -#define SetupIterateCabinet SetupIterateCabinetA -#endif - - -WINSETUPAPI -INT -WINAPI -SetupPromptReboot( - IN HSPFILEQ FileQueue, OPTIONAL - IN HWND Owner, - IN BOOL ScanOnly - ); - -// -// Define flags that are returned by SetupPromptReboot -// -#define SPFILEQ_FILE_IN_USE 0x00000001 -#define SPFILEQ_REBOOT_RECOMMENDED 0x00000002 -#define SPFILEQ_REBOOT_IN_PROGRESS 0x00000004 - - -WINSETUPAPI -PVOID -WINAPI -SetupInitDefaultQueueCallback( - IN HWND OwnerWindow - ); - -WINSETUPAPI -PVOID -WINAPI -SetupInitDefaultQueueCallbackEx( - IN HWND OwnerWindow, - IN HWND AlternateProgressWindow, OPTIONAL - IN UINT ProgressMessage, - IN DWORD Reserved1, - IN PVOID Reserved2 - ); - -WINSETUPAPI -VOID -WINAPI -SetupTermDefaultQueueCallback( - IN PVOID Context - ); - -WINSETUPAPI -UINT -WINAPI -SetupDefaultQueueCallbackA( - IN PVOID Context, - IN UINT Notification, - IN UINT_PTR Param1, - IN UINT_PTR Param2 - ); - -WINSETUPAPI -UINT -WINAPI -SetupDefaultQueueCallbackW( - IN PVOID Context, - IN UINT Notification, - IN UINT_PTR Param1, - IN UINT_PTR Param2 - ); - -#ifdef UNICODE -#define SetupDefaultQueueCallback SetupDefaultQueueCallbackW -#else -#define SetupDefaultQueueCallback SetupDefaultQueueCallbackA -#endif - - -// -// Flags for AddReg section lines in INF. The corresponding value -// is in the AddReg line format given below: -// -// ,,,,... -// -// The low word contains basic flags concerning the general data type -// and AddReg action. The high word contains values that more specifically -// identify the data type of the registry value. The high word is ignored -// by the 16-bit Windows 95 SETUPX APIs. -// -#define FLG_ADDREG_BINVALUETYPE ( 0x00000001 ) -#define FLG_ADDREG_NOCLOBBER ( 0x00000002 ) -#define FLG_ADDREG_DELVAL ( 0x00000004 ) -#define FLG_ADDREG_APPEND ( 0x00000008 ) // Currently supported only - // for REG_MULTI_SZ values. -#define FLG_ADDREG_KEYONLY ( 0x00000010 ) // Just create the key, ignore value -#define FLG_ADDREG_OVERWRITEONLY ( 0x00000020 ) // Set only if value already exists - -#define FLG_ADDREG_TYPE_MASK ( 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE ) -#define FLG_ADDREG_TYPE_SZ ( 0x00000000 ) -#define FLG_ADDREG_TYPE_MULTI_SZ ( 0x00010000 ) -#define FLG_ADDREG_TYPE_EXPAND_SZ ( 0x00020000 ) -#define FLG_ADDREG_TYPE_BINARY ( 0x00000000 | FLG_ADDREG_BINVALUETYPE ) -#define FLG_ADDREG_TYPE_DWORD ( 0x00010000 | FLG_ADDREG_BINVALUETYPE ) -#define FLG_ADDREG_TYPE_NONE ( 0x00020000 | FLG_ADDREG_BINVALUETYPE ) - -// -// Flags for BitReg section lines in INF. -// -#define FLG_BITREG_CLEARBITS ( 0x00000000 ) -#define FLG_BITREG_SETBITS ( 0x00000001 ) - -// -// Flags for RegSvr section lines in INF -// -#define FLG_REGSVR_DLLREGISTER ( 0x00000001 ) -#define FLG_REGSVR_DLLINSTALL ( 0x00000002 ) - -// Flags for RegSvr section lines in INF -// - -#define FLG_PROFITEM_CURRENTUSER ( 0x00000001 ) -#define FLG_PROFITEM_DELETE ( 0x00000002 ) -#define FLG_PROFITEM_GROUP ( 0x00000004 ) -#define FLG_PROFITEM_CSIDL ( 0x00000008 ) - - - -// -// The INF may supply any arbitrary data type ordinal in the highword except -// for the following: REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ. If this -// technique is used, then the data is given in binary format, one byte per -// field. -// - - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFromInfSectionA( - IN HWND Owner, - IN HINF InfHandle, - IN PCSTR SectionName, - IN UINT Flags, - IN HKEY RelativeKeyRoot, OPTIONAL - IN PCSTR SourceRootPath, OPTIONAL - IN UINT CopyFlags, OPTIONAL - IN PSP_FILE_CALLBACK_A MsgHandler, OPTIONAL - IN PVOID Context, OPTIONAL - IN HDEVINFO DeviceInfoSet, OPTIONAL - IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFromInfSectionW( - IN HWND Owner, - IN HINF InfHandle, - IN PCWSTR SectionName, - IN UINT Flags, - IN HKEY RelativeKeyRoot, OPTIONAL - IN PCWSTR SourceRootPath, OPTIONAL - IN UINT CopyFlags, OPTIONAL - IN PSP_FILE_CALLBACK_W MsgHandler, OPTIONAL - IN PVOID Context, OPTIONAL - IN HDEVINFO DeviceInfoSet, OPTIONAL - IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -#ifdef UNICODE -#define SetupInstallFromInfSection SetupInstallFromInfSectionW -#else -#define SetupInstallFromInfSection SetupInstallFromInfSectionA -#endif - -// -// Flags for SetupInstallFromInfSection -// -#define SPINST_LOGCONFIG 0x00000001 -#define SPINST_INIFILES 0x00000002 -#define SPINST_REGISTRY 0x00000004 -#define SPINST_INI2REG 0x00000008 -#define SPINST_FILES 0x00000010 -#define SPINST_BITREG 0x00000020 -#define SPINST_REGSVR 0x00000040 -#define SPINST_UNREGSVR 0x00000080 -#define SPINST_PROFILEITEMS 0x00000100 -#define SPINST_ALL 0x000001ff -#define SPINST_SINGLESECTION 0x00010000 -#define SPINST_LOGCONFIG_IS_FORCED 0x00020000 -#define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000 - - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFilesFromInfSectionA( - IN HINF InfHandle, - IN HINF LayoutInfHandle, OPTIONAL - IN HSPFILEQ FileQueue, - IN PCSTR SectionName, - IN PCSTR SourceRootPath, OPTIONAL - IN UINT CopyFlags - ); - -WINSETUPAPI -BOOL -WINAPI -SetupInstallFilesFromInfSectionW( - IN HINF InfHandle, - IN HINF LayoutInfHandle, OPTIONAL - IN HSPFILEQ FileQueue, - IN PCWSTR SectionName, - IN PCWSTR SourceRootPath, OPTIONAL - IN UINT CopyFlags - ); - -#ifdef UNICODE -#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW -#else -#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA -#endif - - -// -// Flags for SetupInstallServicesFromInfSection(Ex). These flags are also used -// in the flags field of AddService or DelService lines in a device INF. Some -// of these flags are not permitted in the non-Ex API. These flags are marked -// as such below. -// - -// -// (AddService) move service's tag to front of its group order list -// -#define SPSVCINST_TAGTOFRONT (0x00000001) - -// -// (AddService) **Ex API only** mark this service as the function driver for the -// device being installed -// -#define SPSVCINST_ASSOCSERVICE (0x00000002) - -// -// (DelService) delete the associated event log entry for a service specified in -// a DelService entry -// -#define SPSVCINST_DELETEEVENTLOGENTRY (0x00000004) - -// -// (AddService) don't overwrite display name if it already exists -// -#define SPSVCINST_NOCLOBBER_DISPLAYNAME (0x00000008) - -// -// (AddService) don't overwrite start type value if service already exists -// -#define SPSVCINST_NOCLOBBER_STARTTYPE (0x00000010) - -// -// (AddService) don't overwrite error control value if service already exists -// -#define SPSVCINST_NOCLOBBER_ERRORCONTROL (0x00000020) - -// -// (AddService) don't overwrite load order group if it already exists -// -#define SPSVCINST_NOCLOBBER_LOADORDERGROUP (0x00000040) - -// -// (AddService) don't overwrite dependencies list if it already exists -// -#define SPSVCINST_NOCLOBBER_DEPENDENCIES (0x00000080) - -// -// (AddService) don't overwrite description if it already exists -// -#define SPSVCINST_NOCLOBBER_DESCRIPTION (0x00000100) -// -// (DelService) stop the associated service specified in -// a DelService entry before deleting the service -// -#define SPSVCINST_STOPSERVICE (0x00000200) - - - - -WINSETUPAPI -BOOL -WINAPI -SetupInstallServicesFromInfSectionA( - IN HINF InfHandle, - IN PCSTR SectionName, - IN DWORD Flags - ); - -WINSETUPAPI -BOOL -WINAPI -SetupInstallServicesFromInfSectionW( - IN HINF InfHandle, - IN PCWSTR SectionName, - IN DWORD Flags - ); - -#ifdef UNICODE -#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW -#else -#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupInstallServicesFromInfSectionExA( - IN HINF InfHandle, - IN PCSTR SectionName, - IN DWORD Flags, - IN HDEVINFO DeviceInfoSet, OPTIONAL - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PVOID Reserved1, - IN PVOID Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupInstallServicesFromInfSectionExW( - IN HINF InfHandle, - IN PCWSTR SectionName, - IN DWORD Flags, - IN HDEVINFO DeviceInfoSet, OPTIONAL - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PVOID Reserved1, - IN PVOID Reserved2 - ); - -#ifdef UNICODE -#define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExW -#else -#define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExA -#endif - - -// -// Define handle type for Setup file log. -// -typedef PVOID HSPFILELOG; - -WINSETUPAPI -HSPFILELOG -WINAPI -SetupInitializeFileLogA( - IN PCSTR LogFileName, OPTIONAL - IN DWORD Flags - ); - -WINSETUPAPI -HSPFILELOG -WINAPI -SetupInitializeFileLogW( - IN PCWSTR LogFileName, OPTIONAL - IN DWORD Flags - ); - -#ifdef UNICODE -#define SetupInitializeFileLog SetupInitializeFileLogW -#else -#define SetupInitializeFileLog SetupInitializeFileLogA -#endif - -// -// Flags for SetupInitializeFileLog -// -#define SPFILELOG_SYSTEMLOG 0x00000001 // use system log -- must be Administrator -#define SPFILELOG_FORCENEW 0x00000002 // not valid with SPFILELOG_SYSTEMLOG -#define SPFILELOG_QUERYONLY 0x00000004 // allows non-administrators to read system log - - -WINSETUPAPI -BOOL -WINAPI -SetupTerminateFileLog( - IN HSPFILELOG FileLogHandle - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupLogFileA( - IN HSPFILELOG FileLogHandle, - IN PCSTR LogSectionName, OPTIONAL - IN PCSTR SourceFilename, - IN PCSTR TargetFilename, - IN DWORD Checksum, OPTIONAL - IN PCSTR DiskTagfile, OPTIONAL - IN PCSTR DiskDescription, OPTIONAL - IN PCSTR OtherInfo, OPTIONAL - IN DWORD Flags - ); - -WINSETUPAPI -BOOL -WINAPI -SetupLogFileW( - IN HSPFILELOG FileLogHandle, - IN PCWSTR LogSectionName, OPTIONAL - IN PCWSTR SourceFilename, - IN PCWSTR TargetFilename, - IN DWORD Checksum, OPTIONAL - IN PCWSTR DiskTagfile, OPTIONAL - IN PCWSTR DiskDescription, OPTIONAL - IN PCWSTR OtherInfo, OPTIONAL - IN DWORD Flags - ); - -#ifdef UNICODE -#define SetupLogFile SetupLogFileW -#else -#define SetupLogFile SetupLogFileA -#endif - -// -// Flags for SetupLogFile -// -#define SPFILELOG_OEMFILE 0x00000001 - - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveFileLogEntryA( - IN HSPFILELOG FileLogHandle, - IN PCSTR LogSectionName, OPTIONAL - IN PCSTR TargetFilename OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupRemoveFileLogEntryW( - IN HSPFILELOG FileLogHandle, - IN PCWSTR LogSectionName, OPTIONAL - IN PCWSTR TargetFilename OPTIONAL - ); - -#ifdef UNICODE -#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW -#else -#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA -#endif - - -// -// Items retrievable from SetupQueryFileLog() -// -typedef enum { - SetupFileLogSourceFilename, - SetupFileLogChecksum, - SetupFileLogDiskTagfile, - SetupFileLogDiskDescription, - SetupFileLogOtherInfo, - SetupFileLogMax -} SetupFileLogInfo; - -WINSETUPAPI -BOOL -WINAPI -SetupQueryFileLogA( - IN HSPFILELOG FileLogHandle, - IN PCSTR LogSectionName, OPTIONAL - IN PCSTR TargetFilename, - IN SetupFileLogInfo DesiredInfo, - OUT PSTR DataOut, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupQueryFileLogW( - IN HSPFILELOG FileLogHandle, - IN PCWSTR LogSectionName, OPTIONAL - IN PCWSTR TargetFilename, - IN SetupFileLogInfo DesiredInfo, - OUT PWSTR DataOut, OPTIONAL - IN DWORD ReturnBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupQueryFileLog SetupQueryFileLogW -#else -#define SetupQueryFileLog SetupQueryFileLogA -#endif - -// -// Text logging APIs -// -#define LogSeverity DWORD -#define LogSevInformation 0x00000000 -#define LogSevWarning 0x00000001 -#define LogSevError 0x00000002 -#define LogSevFatalError 0x00000003 -#define LogSevMaximum 0x00000004 - -WINSETUPAPI -BOOL -WINAPI -SetupOpenLog ( - BOOL Erase - ); - -WINSETUPAPI -BOOL -WINAPI -SetupLogErrorA ( - IN LPCSTR MessageString, - IN LogSeverity Severity - ); - -WINSETUPAPI -BOOL -WINAPI -SetupLogErrorW ( - IN LPCWSTR MessageString, - IN LogSeverity Severity - ); - -#ifdef UNICODE -#define SetupLogError SetupLogErrorW -#else -#define SetupLogError SetupLogErrorA -#endif - -WINSETUPAPI -VOID -WINAPI -SetupCloseLog ( - VOID - ); - - -// -// Backup Information API -// - -WINSETUPAPI -BOOL -WINAPI -SetupGetBackupInformationA( - IN HSPFILEQ QueueHandle, - OUT PSP_BACKUP_QUEUE_PARAMS_A BackupParams - ); - -WINSETUPAPI -BOOL -WINAPI -SetupGetBackupInformationW( - IN HSPFILEQ QueueHandle, - OUT PSP_BACKUP_QUEUE_PARAMS_W BackupParams - ); - -#ifdef UNICODE -#define SetupGetBackupInformation SetupGetBackupInformationW -#else -#define SetupGetBackupInformation SetupGetBackupInformationA -#endif - - -// -// Device Installer APIs -// - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiCreateDeviceInfoList( - IN CONST GUID *ClassGuid, OPTIONAL - IN HWND hwndParent OPTIONAL - ); - - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiCreateDeviceInfoListExA( - IN CONST GUID *ClassGuid, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiCreateDeviceInfoListExW( - IN CONST GUID *ClassGuid, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExW -#else -#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInfoListClass( - IN HDEVINFO DeviceInfoSet, - OUT LPGUID ClassGuid - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInfoListDetailA( - IN HDEVINFO DeviceInfoSet, - OUT PSP_DEVINFO_LIST_DETAIL_DATA_A DeviceInfoSetDetailData - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInfoListDetailW( - IN HDEVINFO DeviceInfoSet, - OUT PSP_DEVINFO_LIST_DETAIL_DATA_W DeviceInfoSetDetailData - ); - -#ifdef UNICODE -#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailW -#else -#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailA -#endif - - -// -// Flags for SetupDiCreateDeviceInfo -// -#define DICD_GENERATE_ID 0x00000001 -#define DICD_INHERIT_CLASSDRVS 0x00000002 - -WINSETUPAPI -BOOL -WINAPI -SetupDiCreateDeviceInfoA( - IN HDEVINFO DeviceInfoSet, - IN PCSTR DeviceName, - IN CONST GUID *ClassGuid, - IN PCSTR DeviceDescription, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN DWORD CreationFlags, - OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiCreateDeviceInfoW( - IN HDEVINFO DeviceInfoSet, - IN PCWSTR DeviceName, - IN CONST GUID *ClassGuid, - IN PCWSTR DeviceDescription, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN DWORD CreationFlags, - OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW -#else -#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA -#endif - - -// -// Flags for SetupDiOpenDeviceInfo -// -#define DIOD_INHERIT_CLASSDRVS 0x00000002 -#define DIOD_CANCEL_REMOVE 0x00000004 - -WINSETUPAPI -BOOL -WINAPI -SetupDiOpenDeviceInfoA( - IN HDEVINFO DeviceInfoSet, - IN PCSTR DeviceInstanceId, - IN HWND hwndParent, OPTIONAL - IN DWORD OpenFlags, - OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiOpenDeviceInfoW( - IN HDEVINFO DeviceInfoSet, - IN PCWSTR DeviceInstanceId, - IN HWND hwndParent, OPTIONAL - IN DWORD OpenFlags, - OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW -#else -#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInstanceIdA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - OUT PSTR DeviceInstanceId, - IN DWORD DeviceInstanceIdSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInstanceIdW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - OUT PWSTR DeviceInstanceId, - IN DWORD DeviceInstanceIdSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW -#else -#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDeleteDeviceInfo( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiEnumDeviceInfo( - IN HDEVINFO DeviceInfoSet, - IN DWORD MemberIndex, - OUT PSP_DEVINFO_DATA DeviceInfoData - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDestroyDeviceInfoList( - IN HDEVINFO DeviceInfoSet - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiEnumDeviceInterfaces( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN CONST GUID *InterfaceClassGuid, - IN DWORD MemberIndex, - OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData - ); - -// -// Backward compatibility--do not use -// -#define SetupDiEnumInterfaceDevice SetupDiEnumDeviceInterfaces - - -WINSETUPAPI -BOOL -WINAPI -SetupDiCreateDeviceInterfaceA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN CONST GUID *InterfaceClassGuid, - IN PCSTR ReferenceString, OPTIONAL - IN DWORD CreationFlags, - OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiCreateDeviceInterfaceW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN CONST GUID *InterfaceClassGuid, - IN PCWSTR ReferenceString, OPTIONAL - IN DWORD CreationFlags, - OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceW -#else -#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceA -#endif - -// -// Backward compatibility--do not use. -// -#define SetupDiCreateInterfaceDeviceW SetupDiCreateDeviceInterfaceW -#define SetupDiCreateInterfaceDeviceA SetupDiCreateDeviceInterfaceA -#ifdef UNICODE -#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceW -#else -#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceA -#endif - - -// -// Flags for SetupDiOpenDeviceInterface -// -#define DIODI_NO_ADD 0x00000001 - -WINSETUPAPI -BOOL -WINAPI -SetupDiOpenDeviceInterfaceA( - IN HDEVINFO DeviceInfoSet, - IN PCSTR DevicePath, - IN DWORD OpenFlags, - OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiOpenDeviceInterfaceW( - IN HDEVINFO DeviceInfoSet, - IN PCWSTR DevicePath, - IN DWORD OpenFlags, - OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceW -#else -#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceA -#endif - -// -// Backward compatibility--do not use -// -#define SetupDiOpenInterfaceDeviceW SetupDiOpenDeviceInterfaceW -#define SetupDiOpenInterfaceDeviceA SetupDiOpenDeviceInterfaceA -#ifdef UNICODE -#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceW -#else -#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInterfaceAlias( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - IN CONST GUID *AliasInterfaceClassGuid, - OUT PSP_DEVICE_INTERFACE_DATA AliasDeviceInterfaceData - ); - -// -// Backward compatibility--do not use. -// -#define SetupDiGetInterfaceDeviceAlias SetupDiGetDeviceInterfaceAlias - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDeleteDeviceInterfaceData( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData - ); - -// -// Backward compatibility--do not use. -// -#define SetupDiDeleteInterfaceDeviceData SetupDiDeleteDeviceInterfaceData - - -WINSETUPAPI -BOOL -WINAPI -SetupDiRemoveDeviceInterface( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData - ); - -// -// Backward compatibility--do not use. -// -#define SetupDiRemoveInterfaceDevice SetupDiRemoveDeviceInterface - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInterfaceDetailA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData, OPTIONAL - IN DWORD DeviceInterfaceDetailDataSize, - OUT PDWORD RequiredSize, OPTIONAL - OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInterfaceDetailW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData, OPTIONAL - IN DWORD DeviceInterfaceDetailDataSize, - OUT PDWORD RequiredSize, OPTIONAL - OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailW -#else -#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailA -#endif - -// -// Backward compatibility--do not use. -// -#define SetupDiGetInterfaceDeviceDetailW SetupDiGetDeviceInterfaceDetailW -#define SetupDiGetInterfaceDeviceDetailA SetupDiGetDeviceInterfaceDetailA -#ifdef UNICODE -#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailW -#else -#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailA -#endif - - -// -// Default install handler for DIF_INSTALLINTERFACES. -// -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallDeviceInterfaces( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData - ); - -// -// Backward compatibility--do not use. -// -#define SetupDiInstallInterfaceDevices SetupDiInstallDeviceInterfaces - - -// -// Default install handler for DIF_REGISTERDEVICE -// - -// -// Flags for SetupDiRegisterDeviceInfo -// -#define SPRDI_FIND_DUPS 0x00000001 - -WINSETUPAPI -BOOL -WINAPI -SetupDiRegisterDeviceInfo( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Flags, - IN PSP_DETSIG_CMPPROC CompareProc, OPTIONAL - IN PVOID CompareContext, OPTIONAL - OUT PSP_DEVINFO_DATA DupDeviceInfoData OPTIONAL - ); - - -// -// Ordinal values distinguishing between class drivers and -// device drivers. -// (Passed in 'DriverType' parameter of driver information list APIs) -// -#define SPDIT_NODRIVER 0x00000000 -#define SPDIT_CLASSDRIVER 0x00000001 -#define SPDIT_COMPATDRIVER 0x00000002 - -WINSETUPAPI -BOOL -WINAPI -SetupDiBuildDriverInfoList( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN DWORD DriverType - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiCancelDriverInfoSearch( - IN HDEVINFO DeviceInfoSet - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiEnumDriverInfoA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN DWORD DriverType, - IN DWORD MemberIndex, - OUT PSP_DRVINFO_DATA_A DriverInfoData - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiEnumDriverInfoW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN DWORD DriverType, - IN DWORD MemberIndex, - OUT PSP_DRVINFO_DATA_W DriverInfoData - ); - -#ifdef UNICODE -#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW -#else -#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetSelectedDriverA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - OUT PSP_DRVINFO_DATA_A DriverInfoData - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetSelectedDriverW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - OUT PSP_DRVINFO_DATA_W DriverInfoData - ); - -#ifdef UNICODE -#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW -#else -#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetSelectedDriverA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN OUT PSP_DRVINFO_DATA_A DriverInfoData OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetSelectedDriverW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN OUT PSP_DRVINFO_DATA_W DriverInfoData OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW -#else -#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDriverInfoDetailA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DRVINFO_DATA_A DriverInfoData, - OUT PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData, OPTIONAL - IN DWORD DriverInfoDetailDataSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDriverInfoDetailW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DRVINFO_DATA_W DriverInfoData, - OUT PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData, OPTIONAL - IN DWORD DriverInfoDetailDataSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW -#else -#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDestroyDriverInfoList( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN DWORD DriverType - ); - - -// -// Flags controlling what is included in the device information set built -// by SetupDiGetClassDevs -// -#define DIGCF_DEFAULT 0x00000001 // only valid with DIGCF_DEVICEINTERFACE -#define DIGCF_PRESENT 0x00000002 -#define DIGCF_ALLCLASSES 0x00000004 -#define DIGCF_PROFILE 0x00000008 -#define DIGCF_DEVICEINTERFACE 0x00000010 - -// -// Backward compatibility--do not use. -// -#define DIGCF_INTERFACEDEVICE DIGCF_DEVICEINTERFACE - - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiGetClassDevsA( - IN CONST GUID *ClassGuid, OPTIONAL - IN PCSTR Enumerator, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN DWORD Flags - ); - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiGetClassDevsW( - IN CONST GUID *ClassGuid, OPTIONAL - IN PCWSTR Enumerator, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN DWORD Flags - ); - -#ifdef UNICODE -#define SetupDiGetClassDevs SetupDiGetClassDevsW -#else -#define SetupDiGetClassDevs SetupDiGetClassDevsA -#endif - - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiGetClassDevsExA( - IN CONST GUID *ClassGuid, OPTIONAL - IN PCSTR Enumerator, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN DWORD Flags, - IN HDEVINFO DeviceInfoSet, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -HDEVINFO -WINAPI -SetupDiGetClassDevsExW( - IN CONST GUID *ClassGuid, OPTIONAL - IN PCWSTR Enumerator, OPTIONAL - IN HWND hwndParent, OPTIONAL - IN DWORD Flags, - IN HDEVINFO DeviceInfoSet, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiGetClassDevsEx SetupDiGetClassDevsExW -#else -#define SetupDiGetClassDevsEx SetupDiGetClassDevsExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetINFClassA( - IN PCSTR InfName, - OUT LPGUID ClassGuid, - OUT PSTR ClassName, - IN DWORD ClassNameSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetINFClassW( - IN PCWSTR InfName, - OUT LPGUID ClassGuid, - OUT PWSTR ClassName, - IN DWORD ClassNameSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetINFClass SetupDiGetINFClassW -#else -#define SetupDiGetINFClass SetupDiGetINFClassA -#endif - - -// -// Flags controlling exclusion from the class information list built -// by SetupDiBuildClassInfoList(Ex) -// -#define DIBCI_NOINSTALLCLASS 0x00000001 -#define DIBCI_NODISPLAYCLASS 0x00000002 - -WINSETUPAPI -BOOL -WINAPI -SetupDiBuildClassInfoList( - IN DWORD Flags, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiBuildClassInfoListExA( - IN DWORD Flags, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize, - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiBuildClassInfoListExW( - IN DWORD Flags, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize, - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExW -#else -#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassDescriptionA( - IN CONST GUID *ClassGuid, - OUT PSTR ClassDescription, - IN DWORD ClassDescriptionSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassDescriptionW( - IN CONST GUID *ClassGuid, - OUT PWSTR ClassDescription, - IN DWORD ClassDescriptionSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetClassDescription SetupDiGetClassDescriptionW -#else -#define SetupDiGetClassDescription SetupDiGetClassDescriptionA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassDescriptionExA( - IN CONST GUID *ClassGuid, - OUT PSTR ClassDescription, - IN DWORD ClassDescriptionSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassDescriptionExW( - IN CONST GUID *ClassGuid, - OUT PWSTR ClassDescription, - IN DWORD ClassDescriptionSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExW -#else -#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiCallClassInstaller( - IN DI_FUNCTION InstallFunction, - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - - -// -// Default install handler for DIF_SELECTDEVICE -// -WINSETUPAPI -BOOL -WINAPI -SetupDiSelectDevice( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - - -// -// Default install handler for DIF_SELECTBESTCOMPATDRV -// -WINSETUPAPI -BOOL -WINAPI -SetupDiSelectBestCompatDrv( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - - -// -// Default install handler for DIF_INSTALLDEVICE -// -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallDevice( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData - ); - - -// -// Default install handler for DIF_INSTALLDEVICEFILES -// -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallDriverFiles( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData - ); - - -// -// Default install handler for DIF_REGISTER_COINSTALLERS -// -WINSETUPAPI -BOOL -WINAPI -SetupDiRegisterCoDeviceInstallers( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData - ); - - -// -// Default install handler for DIF_REMOVE -// -WINSETUPAPI -BOOL -WINAPI -SetupDiRemoveDevice( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData - ); - - -// -// Default install handler for DIF_UNREMOVE -// -WINSETUPAPI -BOOL -WINAPI -SetupDiUnremoveDevice( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData - ); - - -// -// Default install handler for DIF_MOVEDEVICE -// -WINSETUPAPI -BOOL -WINAPI -SetupDiMoveDuplicateDevice( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DestinationDeviceInfoData - ); - - -// -// Default install handler for DIF_PROPERTYCHANGE -// -WINSETUPAPI -BOOL -WINAPI -SetupDiChangeState( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallClassA( - IN HWND hwndParent, OPTIONAL - IN PCSTR InfFileName, - IN DWORD Flags, - IN HSPFILEQ FileQueue OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallClassW( - IN HWND hwndParent, OPTIONAL - IN PCWSTR InfFileName, - IN DWORD Flags, - IN HSPFILEQ FileQueue OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiInstallClass SetupDiInstallClassW -#else -#define SetupDiInstallClass SetupDiInstallClassA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallClassExA( - IN HWND hwndParent, OPTIONAL - IN PCSTR InfFileName, OPTIONAL - IN DWORD Flags, - IN HSPFILEQ FileQueue, OPTIONAL - IN CONST GUID *InterfaceClassGuid, OPTIONAL - IN PVOID Reserved1, - IN PVOID Reserved2 - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiInstallClassExW( - IN HWND hwndParent, OPTIONAL - IN PCWSTR InfFileName, OPTIONAL - IN DWORD Flags, - IN HSPFILEQ FileQueue, OPTIONAL - IN CONST GUID *InterfaceClassGuid, OPTIONAL - IN PVOID Reserved1, - IN PVOID Reserved2 - ); - -#ifdef UNICODE -#define SetupDiInstallClassEx SetupDiInstallClassExW -#else -#define SetupDiInstallClassEx SetupDiInstallClassExA -#endif - - -WINSETUPAPI -HKEY -WINAPI -SetupDiOpenClassRegKey( - IN CONST GUID *ClassGuid, OPTIONAL - IN REGSAM samDesired - ); - - -// -// Flags for SetupDiOpenClassRegKeyEx -// -#define DIOCR_INSTALLER 0x00000001 // class installer registry branch -#define DIOCR_INTERFACE 0x00000002 // interface class registry branch - -WINSETUPAPI -HKEY -WINAPI -SetupDiOpenClassRegKeyExA( - IN CONST GUID *ClassGuid, OPTIONAL - IN REGSAM samDesired, - IN DWORD Flags, - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -HKEY -WINAPI -SetupDiOpenClassRegKeyExW( - IN CONST GUID *ClassGuid, OPTIONAL - IN REGSAM samDesired, - IN DWORD Flags, - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExW -#else -#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExA -#endif - - -WINSETUPAPI -HKEY -WINAPI -SetupDiCreateDeviceInterfaceRegKeyA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - IN DWORD Reserved, - IN REGSAM samDesired, - IN HINF InfHandle, OPTIONAL - IN PCSTR InfSectionName OPTIONAL - ); - -WINSETUPAPI -HKEY -WINAPI -SetupDiCreateDeviceInterfaceRegKeyW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - IN DWORD Reserved, - IN REGSAM samDesired, - IN HINF InfHandle, OPTIONAL - IN PCWSTR InfSectionName OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyW -#else -#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyA -#endif - -// -// Backward compatibility--do not use. -// -#define SetupDiCreateInterfaceDeviceRegKeyW SetupDiCreateDeviceInterfaceRegKeyW -#define SetupDiCreateInterfaceDeviceRegKeyA SetupDiCreateDeviceInterfaceRegKeyA -#ifdef UNICODE -#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyW -#else -#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyA -#endif - - -WINSETUPAPI -HKEY -WINAPI -SetupDiOpenDeviceInterfaceRegKey( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - IN DWORD Reserved, - IN REGSAM samDesired - ); - -// -// Backward compatibility--do not use. -// -#define SetupDiOpenInterfaceDeviceRegKey SetupDiOpenDeviceInterfaceRegKey - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDeleteDeviceInterfaceRegKey( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, - IN DWORD Reserved - ); - -// -// Backward compatibility--do not use. -// -#define SetupDiDeleteInterfaceDeviceRegKey SetupDiDeleteDeviceInterfaceRegKey - - -// -// KeyType values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and -// SetupDiDeleteDevRegKey. -// -#define DIREG_DEV 0x00000001 // Open/Create/Delete device key -#define DIREG_DRV 0x00000002 // Open/Create/Delete driver key -#define DIREG_BOTH 0x00000004 // Delete both driver and Device key - -WINSETUPAPI -HKEY -WINAPI -SetupDiCreateDevRegKeyA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Scope, - IN DWORD HwProfile, - IN DWORD KeyType, - IN HINF InfHandle, OPTIONAL - IN PCSTR InfSectionName OPTIONAL - ); - -WINSETUPAPI -HKEY -WINAPI -SetupDiCreateDevRegKeyW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Scope, - IN DWORD HwProfile, - IN DWORD KeyType, - IN HINF InfHandle, OPTIONAL - IN PCWSTR InfSectionName OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW -#else -#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA -#endif - - -WINSETUPAPI -HKEY -WINAPI -SetupDiOpenDevRegKey( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Scope, - IN DWORD HwProfile, - IN DWORD KeyType, - IN REGSAM samDesired - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDeleteDevRegKey( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Scope, - IN DWORD HwProfile, - IN DWORD KeyType - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileList( - OUT PDWORD HwProfileList, - IN DWORD HwProfileListSize, - OUT PDWORD RequiredSize, - OUT PDWORD CurrentlyActiveIndex OPTIONAL - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileListExA( - OUT PDWORD HwProfileList, - IN DWORD HwProfileListSize, - OUT PDWORD RequiredSize, - OUT PDWORD CurrentlyActiveIndex, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileListExW( - OUT PDWORD HwProfileList, - IN DWORD HwProfileListSize, - OUT PDWORD RequiredSize, - OUT PDWORD CurrentlyActiveIndex, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExW -#else -#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExA -#endif - - -// -// Device registry property codes -// (Codes marked as read-only (R) may only be used for -// SetupDiGetDeviceRegistryProperty) -// -// These values should cover the same set of registry properties -// as defined by the CM_DRP codes in cfgmgr32.h. -// -#define SPDRP_DEVICEDESC (0x00000000) // DeviceDesc (R/W) -#define SPDRP_HARDWAREID (0x00000001) // HardwareID (R/W) -#define SPDRP_COMPATIBLEIDS (0x00000002) // CompatibleIDs (R/W) -#define SPDRP_UNUSED0 (0x00000003) // unused -#define SPDRP_SERVICE (0x00000004) // Service (R/W) -#define SPDRP_UNUSED1 (0x00000005) // unused -#define SPDRP_UNUSED2 (0x00000006) // unused -#define SPDRP_CLASS (0x00000007) // Class (R--tied to ClassGUID) -#define SPDRP_CLASSGUID (0x00000008) // ClassGUID (R/W) -#define SPDRP_DRIVER (0x00000009) // Driver (R/W) -#define SPDRP_CONFIGFLAGS (0x0000000A) // ConfigFlags (R/W) -#define SPDRP_MFG (0x0000000B) // Mfg (R/W) -#define SPDRP_FRIENDLYNAME (0x0000000C) // FriendlyName (R/W) -#define SPDRP_LOCATION_INFORMATION (0x0000000D) // LocationInformation (R/W) -#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME (0x0000000E) // PhysicalDeviceObjectName (R) -#define SPDRP_CAPABILITIES (0x0000000F) // Capabilities (R) -#define SPDRP_UI_NUMBER (0x00000010) // UiNumber (R) -#define SPDRP_UPPERFILTERS (0x00000011) // UpperFilters (R/W) -#define SPDRP_LOWERFILTERS (0x00000012) // LowerFilters (R/W) -#define SPDRP_BUSTYPEGUID (0x00000013) // BusTypeGUID (R) -#define SPDRP_LEGACYBUSTYPE (0x00000014) // LegacyBusType (R) -#define SPDRP_BUSNUMBER (0x00000015) // BusNumber (R) -#define SPDRP_ENUMERATOR_NAME (0x00000016) // Enumerator Name (R) -#define SPDRP_SECURITY (0x00000017) // Security (R/W, binary form) -#define SPDRP_SECURITY_SDS (0x00000018) // Security (W, SDS form) -#define SPDRP_DEVTYPE (0x00000019) // Device Type (R/W) -#define SPDRP_EXCLUSIVE (0x0000001A) // Device is exclusive-access (R/W) -#define SPDRP_CHARACTERISTICS (0x0000001B) // Device Characteristics (R/W) -#define SPDRP_ADDRESS (0x0000001C) // Device Address (R) -#define SPDRP_UI_NUMBER_DESC_FORMAT (0X0000001E) // UiNumberDescFormat (R/W) -#define SPDRP_MAXIMUM_PROPERTY (0x0000001F) // Upper bound on ordinals -// -// Class registry property codes -// (Codes marked as read-only (R) may only be used for -// SetupDiGetClassRegistryProperty) -// -// These values should cover the same set of registry properties -// as defined by the CM_CRP codes in cfgmgr32.h. -// they should also have a 1:1 correspondence with Device registers, where applicable -// but no overlap otherwise -// -#define SPCRP_SECURITY (0x00000017) // Security (R/W, binary form) -#define SPCRP_SECURITY_SDS (0x00000018) // Security (W, SDS form) -#define SPCRP_DEVTYPE (0x00000019) // Device Type (R/W) -#define SPCRP_EXCLUSIVE (0x0000001A) // Device is exclusive-access (R/W) -#define SPCRP_CHARACTERISTICS (0x0000001B) // Device Characteristics (R/W) -#define SPCRP_MAXIMUM_PROPERTY (0x0000001C) // Upper bound on ordinals - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceRegistryPropertyA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Property, - OUT PDWORD PropertyRegDataType, OPTIONAL - OUT PBYTE PropertyBuffer, - IN DWORD PropertyBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceRegistryPropertyW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Property, - OUT PDWORD PropertyRegDataType, OPTIONAL - OUT PBYTE PropertyBuffer, - IN DWORD PropertyBufferSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW -#else -#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassRegistryPropertyA( - IN LPGUID ClassGuid, - IN DWORD Property, - OUT PDWORD PropertyRegDataType, OPTIONAL - OUT PBYTE PropertyBuffer, - IN DWORD PropertyBufferSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassRegistryPropertyW( - IN LPGUID ClassGuid, - IN DWORD Property, - OUT PDWORD PropertyRegDataType, OPTIONAL - OUT PBYTE PropertyBuffer, - IN DWORD PropertyBufferSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyW -#else -#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetDeviceRegistryPropertyA( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Property, - IN CONST BYTE* PropertyBuffer, OPTIONAL - IN DWORD PropertyBufferSize - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetDeviceRegistryPropertyW( - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData, - IN DWORD Property, - IN CONST BYTE* PropertyBuffer, OPTIONAL - IN DWORD PropertyBufferSize - ); - -#ifdef UNICODE -#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW -#else -#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA -#endif - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetClassRegistryPropertyA( - IN LPGUID ClassGuid, - IN DWORD Property, - IN CONST BYTE* PropertyBuffer, OPTIONAL - IN DWORD PropertyBufferSize, - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetClassRegistryPropertyW( - IN LPGUID ClassGuid, - IN DWORD Property, - IN CONST BYTE* PropertyBuffer, OPTIONAL - IN DWORD PropertyBufferSize, - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyW -#else -#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInstallParamsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - OUT PSP_DEVINSTALL_PARAMS_A DeviceInstallParams - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDeviceInstallParamsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams - ); - -#ifdef UNICODE -#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW -#else -#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassInstallParamsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - OUT PSP_CLASSINSTALL_HEADER ClassInstallParams, OPTIONAL - IN DWORD ClassInstallParamsSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassInstallParamsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - OUT PSP_CLASSINSTALL_HEADER ClassInstallParams, OPTIONAL - IN DWORD ClassInstallParamsSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW -#else -#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetDeviceInstallParamsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DEVINSTALL_PARAMS_A DeviceInstallParams - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetDeviceInstallParamsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams - ); - -#ifdef UNICODE -#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW -#else -#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetClassInstallParamsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_CLASSINSTALL_HEADER ClassInstallParams, OPTIONAL - IN DWORD ClassInstallParamsSize - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetClassInstallParamsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_CLASSINSTALL_HEADER ClassInstallParams, OPTIONAL - IN DWORD ClassInstallParamsSize - ); - -#ifdef UNICODE -#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW -#else -#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDriverInstallParamsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DRVINFO_DATA_A DriverInfoData, - OUT PSP_DRVINSTALL_PARAMS DriverInstallParams - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetDriverInstallParamsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DRVINFO_DATA_W DriverInfoData, - OUT PSP_DRVINSTALL_PARAMS DriverInstallParams - ); - -#ifdef UNICODE -#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW -#else -#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetDriverInstallParamsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DRVINFO_DATA_A DriverInfoData, - IN PSP_DRVINSTALL_PARAMS DriverInstallParams - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetDriverInstallParamsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_DRVINFO_DATA_W DriverInfoData, - IN PSP_DRVINSTALL_PARAMS DriverInstallParams - ); - -#ifdef UNICODE -#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW -#else -#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiLoadClassIcon( - IN CONST GUID *ClassGuid, - OUT HICON *LargeIcon, OPTIONAL - OUT PINT MiniIconIndex OPTIONAL - ); - - -// -// Flags controlling the drawing of mini-icons -// -#define DMI_MASK 0x00000001 -#define DMI_BKCOLOR 0x00000002 -#define DMI_USERECT 0x00000004 - -WINSETUPAPI -INT -WINAPI -SetupDiDrawMiniIcon( - IN HDC hdc, - IN RECT rc, - IN INT MiniIconIndex, - IN DWORD Flags - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassBitmapIndex( - IN CONST GUID *ClassGuid, OPTIONAL - OUT PINT MiniIconIndex - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassImageList( - OUT PSP_CLASSIMAGELIST_DATA ClassImageListData - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassImageListExA( - OUT PSP_CLASSIMAGELIST_DATA ClassImageListData, - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassImageListExW( - OUT PSP_CLASSIMAGELIST_DATA ClassImageListData, - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiGetClassImageListEx SetupDiGetClassImageListExW -#else -#define SetupDiGetClassImageListEx SetupDiGetClassImageListExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassImageIndex( - IN PSP_CLASSIMAGELIST_DATA ClassImageListData, - IN CONST GUID *ClassGuid, - OUT PINT ImageIndex - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiDestroyClassImageList( - IN PSP_CLASSIMAGELIST_DATA ClassImageListData - ); - - -// -// PropertySheetType values for the SetupDiGetClassDevPropertySheets API -// -#define DIGCDP_FLAG_BASIC 0x00000001 -#define DIGCDP_FLAG_ADVANCED 0x00000002 - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassDevPropertySheetsA( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN LPPROPSHEETHEADERA PropertySheetHeader, - IN DWORD PropertySheetHeaderPageListSize, - OUT PDWORD RequiredSize, OPTIONAL - IN DWORD PropertySheetType - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetClassDevPropertySheetsW( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN LPPROPSHEETHEADERW PropertySheetHeader, - IN DWORD PropertySheetHeaderPageListSize, - OUT PDWORD RequiredSize, OPTIONAL - IN DWORD PropertySheetType - ); - -#ifdef UNICODE -#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW -#else -#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA -#endif - - -// -// Define ICON IDs publicly exposed from setupapi. -// -#define IDI_RESOURCEFIRST 159 -#define IDI_RESOURCE 159 -#define IDI_RESOURCELAST 161 -#define IDI_RESOURCEOVERLAYFIRST 161 -#define IDI_RESOURCEOVERLAYLAST 161 -#define IDI_CONFLICT 161 - -#define IDI_CLASSICON_OVERLAYFIRST 500 -#define IDI_CLASSICON_OVERLAYLAST 502 -#define IDI_PROBLEM_OVL 500 -#define IDI_DISABLED_OVL 501 -#define IDI_FORCED_OVL 502 - - -WINSETUPAPI -BOOL -WINAPI -SetupDiAskForOEMDisk( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSelectOEMDrv( - IN HWND hwndParent, OPTIONAL - IN HDEVINFO DeviceInfoSet, - IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassNameFromGuidA( - IN CONST GUID *ClassGuid, - OUT PSTR ClassName, - IN DWORD ClassNameSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassNameFromGuidW( - IN CONST GUID *ClassGuid, - OUT PWSTR ClassName, - IN DWORD ClassNameSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW -#else -#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassNameFromGuidExA( - IN CONST GUID *ClassGuid, - OUT PSTR ClassName, - IN DWORD ClassNameSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassNameFromGuidExW( - IN CONST GUID *ClassGuid, - OUT PWSTR ClassName, - IN DWORD ClassNameSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExW -#else -#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassGuidsFromNameA( - IN PCSTR ClassName, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassGuidsFromNameW( - IN PCWSTR ClassName, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize - ); - -#ifdef UNICODE -#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW -#else -#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassGuidsFromNameExA( - IN PCSTR ClassName, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize, - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiClassGuidsFromNameExW( - IN PCWSTR ClassName, - OUT LPGUID ClassGuidList, - IN DWORD ClassGuidListSize, - OUT PDWORD RequiredSize, - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExW -#else -#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileFriendlyNameA( - IN DWORD HwProfile, - OUT PSTR FriendlyName, - IN DWORD FriendlyNameSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileFriendlyNameW( - IN DWORD HwProfile, - OUT PWSTR FriendlyName, - IN DWORD FriendlyNameSize, - OUT PDWORD RequiredSize OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW -#else -#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA -#endif - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileFriendlyNameExA( - IN DWORD HwProfile, - OUT PSTR FriendlyName, - IN DWORD FriendlyNameSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetHwProfileFriendlyNameExW( - IN DWORD HwProfile, - OUT PWSTR FriendlyName, - IN DWORD FriendlyNameSize, - OUT PDWORD RequiredSize, OPTIONAL - IN PCWSTR MachineName, OPTIONAL - IN PVOID Reserved - ); - -#ifdef UNICODE -#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExW -#else -#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExA -#endif - - -// -// PageType values for SetupDiGetWizardPage API -// -#define SPWPT_SELECTDEVICE 0x00000001 - -// -// Flags for SetupDiGetWizardPage API -// -#define SPWP_USE_DEVINFO_DATA 0x00000001 - -WINSETUPAPI -HPROPSHEETPAGE -WINAPI -SetupDiGetWizardPage( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL - IN PSP_INSTALLWIZARD_DATA InstallWizardData, - IN DWORD PageType, - IN DWORD Flags - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetSelectedDevice( - IN HDEVINFO DeviceInfoSet, - OUT PSP_DEVINFO_DATA DeviceInfoData - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiSetSelectedDevice( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData - ); - - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetActualSectionToInstallA( - IN HINF InfHandle, - IN PCSTR InfSectionName, - OUT PSTR InfSectionWithExt, OPTIONAL - IN DWORD InfSectionWithExtSize, - OUT PDWORD RequiredSize, OPTIONAL - OUT PSTR *Extension OPTIONAL - ); - -WINSETUPAPI -BOOL -WINAPI -SetupDiGetActualSectionToInstallW( - IN HINF InfHandle, - IN PCWSTR InfSectionName, - OUT PWSTR InfSectionWithExt, OPTIONAL - IN DWORD InfSectionWithExtSize, - OUT PDWORD RequiredSize, OPTIONAL - OUT PWSTR *Extension OPTIONAL - ); - -#ifdef UNICODE -#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW -#else -#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA -#endif - - -#ifdef __cplusplus -} -#endif - -#include - -#endif // _INC_SETUPAPI - - +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + setupapi.h + +Abstract: + + Public header file for Windows NT Setup and Device Installer services Dll. + +--*/ + +#ifndef _INC_SETUPAPI +#define _INC_SETUPAPI + +#if _MSC_VER > 1000 +#pragma once +#endif +#include + +#pragma region Desktop Family +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +#if defined (_MSC_VER) && (_MSC_VER >= 1200) +#pragma warning(push) +#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/union */ +#endif + +// +// Define API decoration for direct importing of DLL references. +// +#if !defined(_SETUPAPI_) +#define WINSETUPAPI DECLSPEC_IMPORT +#else +#define WINSETUPAPI +#endif + +// +// determine version of setupapi based on _WIN32_WINDOWS and _WIN32_WINNT +// +// NT4 version of setupapi (_WIN32_WINNT_NT4) is earliest, and installed onto Win95 by IE. +// Win2k version of setupapi (_WIN32_WINNT_WIN2K) also shipped in WinME +// we'll use "0x0410" to indicate version of setupapi shipped with Win98 +// +#ifndef _SETUPAPI_VER +#if defined(_WIN32_WINNT) && (!defined(_WIN32_WINDOWS) || (_WIN32_WINNT < _WIN32_WINDOWS)) +#define _SETUPAPI_VER _WIN32_WINNT // SetupAPI version follows Windows NT version +#elif defined(_WIN32_WINDOWS) +#if _WIN32_WINDOWS >= 0x0490 +#define _SETUPAPI_VER _WIN32_WINNT_WIN2K // WinME uses same version of SetupAPI as Win2k +#elif _WIN32_WINDOWS >= 0x0410 +#define _SETUPAPI_VER 0x0410 // Indicates version of SetupAPI shipped with Win98 +#else +#define _SETUPAPI_VER _WIN32_WINNT_NT4 // Earliest SetupAPI version +#endif // _WIN32_WINDOWS +#else // _WIN32_WINNT/_WIN32_WINDOWS +#define _SETUPAPI_VER _WIN32_WINNT_WINXP +#endif // _WIN32_WINNT/_WIN32_WINDOWS +#endif // !_SETUPAPI_VER + +#ifndef __LPGUID_DEFINED__ +#define __LPGUID_DEFINED__ +typedef GUID *LPGUID; +#endif + +// +// Include spapidef.h for basic definitions and flags +// +#include + +// +// Include commctrl.h for our use of HIMAGELIST and wizard support. +// +#include + +// +// Include devpropdef.h for our use of DEVPROPERTYKEY and DEVPROPTYPE. +// +#include + +#if defined(_WIN64) +#include // Assume 8-byte (64-bit) packing throughout +#else +#include // Assume byte packing throughout (32-bit processor) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// +// Define maximum string length constants +// +#define LINE_LEN 256 // Windows 9x-compatible maximum for + // displayable strings coming from a + // device INF. +#define MAX_INF_STRING_LENGTH 4096 // Actual maximum size of an INF string + // (including string substitutions). +#define MAX_INF_SECTION_NAME_LENGTH 255 // For Windows 9x compatibility, INF + // section names should be constrained + // to 32 characters. + +#define MAX_TITLE_LEN 60 +#define MAX_INSTRUCTION_LEN 256 +#define MAX_LABEL_LEN 30 +#define MAX_SERVICE_NAME_LEN 256 +#define MAX_SUBTITLE_LEN 256 + +// +// Define maximum length of a machine name in the format expected by ConfigMgr32 +// CM_Connect_Machine (i.e., "\\\\MachineName\0"). +// +#define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3) + +// +// Define type for reference to loaded inf file +// +typedef PVOID HINF; + +// +// Inf context structure. Applications must not interpret or +// overwrite values in these structures. +// +typedef struct _INFCONTEXT { + PVOID Inf; + PVOID CurrentInf; + UINT Section; + UINT Line; +} INFCONTEXT, *PINFCONTEXT; + +// +// Inf file information structure. +// +typedef struct _SP_INF_INFORMATION { + DWORD InfStyle; + DWORD InfCount; + BYTE VersionData[ANYSIZE_ARRAY]; +} SP_INF_INFORMATION, *PSP_INF_INFORMATION; + +// +// Define structure for passing alternate platform info into +// SetupSetFileQueueAlternatePlatform and SetupQueryInfOriginalFileInformation. +// +typedef struct _SP_ALTPLATFORM_INFO_V3 { + DWORD cbSize; + // + // platform to use (VER_PLATFORM_WIN32_WINDOWS or VER_PLATFORM_WIN32_NT) + // + DWORD Platform; + // + // major and minor version numbers to use + // + DWORD MajorVersion; + DWORD MinorVersion; + // + // processor architecture to use (PROCESSOR_ARCHITECTURE_INTEL, + // PROCESSOR_ARCHITECTURE_AMD64, PROCESSOR_ARCHITECTURE_IA64, + // or PROCESSOR_ARCHITECTURE_ARM). + // + WORD ProcessorArchitecture; + + union { + WORD Reserved; // for compatibility with V1 structure + WORD Flags; // indicates validity of non V1 fields + } DUMMYUNIONNAME; + + // + // specify SP_ALTPLATFORM_FLAGS_VERSION_RANGE in Flags + // to use FirstValidatedMajorVersion and FirstValidatedMinorVersion + // + // Major and minor versions of the oldest previous OS for which this + // package's digital signature may be considered valid. For example, say + // the alternate platform is VER_PLATFORM_WIN32_NT, version 5.1. However, + // it is wished that driver packages signed with a 5.0 osattr also be + // considered valid. In this case, you'd have a MajorVersion/MinorVersion + // of 5.1, and a FirstValidatedMajorVersion/FirstValidatedMinorVersion of + // 5.0. To validate packages signed for any previous OS release, specify + // 0 for these fields. To only validate against the target alternate + // platform, specify the same values as those in the MajorVersion and + // MinorVersion fields. + // + DWORD FirstValidatedMajorVersion; + DWORD FirstValidatedMinorVersion; + + // + // specify non-zero value (e.g. VER_NT_WORKSTATION) in ProductType to use + // field, and/or specify SP_ALTPLATFORM_FLAGS_SUITE_MASK in Flags to use + // SuiteMask field, which may be zero. + // + // Product type and suite mask of alternate platform. Used to select + // matching decorated install sections within driver packages that target + // specific product variants of the OS. For example, for only Server + // products with the Enterprise or Small Business suite classification, + // use ProductType VER_NT_SERVER with SuiteMask VER_SUITE_ENTERPRISE and + // VER_SUITE_SMALLBUSINESS. + // + BYTE ProductType; + WORD SuiteMask; + + // + // Build number of alternate platform. Used to select matching + // decorated install sections within driver packages that target a + // minimal build number with the specified OS + // MajorVersion/MinorVersion. If no specific minimal build number + // targeting is required, a value of zero should be specified. Note that + // this capability is only supported on certain builds of 10.0 and + // later. + // + DWORD BuildNumber; + +} SP_ALTPLATFORM_INFO_V3, *PSP_ALTPLATFORM_INFO_V3; + +typedef struct _SP_ALTPLATFORM_INFO_V2 { + DWORD cbSize; + DWORD Platform; + DWORD MajorVersion; + DWORD MinorVersion; + WORD ProcessorArchitecture; + union { + WORD Reserved; + WORD Flags; + } DUMMYUNIONNAME; + DWORD FirstValidatedMajorVersion; + DWORD FirstValidatedMinorVersion; +} SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2; + +typedef struct _SP_ALTPLATFORM_INFO_V1 { + DWORD cbSize; + DWORD Platform; + DWORD MajorVersion; + DWORD MinorVersion; + WORD ProcessorArchitecture; + WORD Reserved; // must be zero. +} SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1; + +#if USE_SP_ALTPLATFORM_INFO_V1 || (_SETUPAPI_VER < _WIN32_WINNT_WINXP) +// use version 1 altplatform info data structure +typedef SP_ALTPLATFORM_INFO_V1 SP_ALTPLATFORM_INFO; +typedef PSP_ALTPLATFORM_INFO_V1 PSP_ALTPLATFORM_INFO; + +#elif USE_SP_ALTPLATFORM_INFO_V3 && (NTDDI_VERSION >= NTDDI_WIN10_RS1) +// use version 3 altplatform info data structure +typedef SP_ALTPLATFORM_INFO_V3 SP_ALTPLATFORM_INFO; +typedef PSP_ALTPLATFORM_INFO_V3 PSP_ALTPLATFORM_INFO; + +#else +// use version 2 altplatform info data structure +typedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO; +typedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO; + +#endif // use default version of altplatform info data structure + +// +// SP_ALTPLATFORM_INFO.Flags values +// +#if _WIN32_WINNT >= _WIN32_WINNT_WINXP +#define SP_ALTPLATFORM_FLAGS_VERSION_RANGE (0x0001) // FirstValidatedMajor/MinorVersion +#endif +#if NTDDI_VERSION >= NTDDI_WIN10_RS1 +#define SP_ALTPLATFORM_FLAGS_SUITE_MASK (0x0002) // SuiteMask +#endif + + +// +// Define structure that is filled in by SetupQueryInfOriginalFileInformation +// to indicate the INF's original name and the original name of the (potentially +// platform-specific) catalog file specified by that INF. +// +typedef struct _SP_ORIGINAL_FILE_INFO_A { + DWORD cbSize; + CHAR OriginalInfName[MAX_PATH]; + CHAR OriginalCatalogName[MAX_PATH]; +} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A; + +typedef struct _SP_ORIGINAL_FILE_INFO_W { + DWORD cbSize; + WCHAR OriginalInfName[MAX_PATH]; + WCHAR OriginalCatalogName[MAX_PATH]; +} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W; + +#ifdef UNICODE +typedef SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO; +typedef PSP_ORIGINAL_FILE_INFO_W PSP_ORIGINAL_FILE_INFO; +#else +typedef SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO; +typedef PSP_ORIGINAL_FILE_INFO_A PSP_ORIGINAL_FILE_INFO; +#endif + +// +// SP_INF_INFORMATION.InfStyle values +// +#define INF_STYLE_NONE 0x00000000 // unrecognized or non-existent +#define INF_STYLE_OLDNT 0x00000001 // winnt 3.x +#define INF_STYLE_WIN4 0x00000002 // Win95 + +// +// Additional InfStyle flags that may be specified when calling SetupOpenInfFile. +// +// +#define INF_STYLE_CACHE_ENABLE 0x00000010 // always cache INF, even outside of %windir%\Inf +#define INF_STYLE_CACHE_DISABLE 0x00000020 // delete cached INF information +#if _SETUPAPI_VER >= _WIN32_WINNT_WS03 +#define INF_STYLE_CACHE_IGNORE 0x00000040 // ignore any cached INF information +#endif + + +// +// Target directory specs. +// +#define DIRID_ABSOLUTE -1 // real 32-bit -1 +#define DIRID_ABSOLUTE_16BIT 0xffff // 16-bit -1 for compat w/setupx +#define DIRID_NULL 0 +#define DIRID_SRCPATH 1 +#define DIRID_WINDOWS 10 +#define DIRID_SYSTEM 11 // system32 +#define DIRID_DRIVERS 12 +#define DIRID_IOSUBSYS DIRID_DRIVERS +#define DIRID_DRIVER_STORE 13 +#define DIRID_INF 17 +#define DIRID_HELP 18 +#define DIRID_FONTS 20 +#define DIRID_VIEWERS 21 +#define DIRID_COLOR 23 +#define DIRID_APPS 24 +#define DIRID_SHARED 25 +#define DIRID_BOOT 30 + +#define DIRID_SYSTEM16 50 +#define DIRID_SPOOL 51 +#define DIRID_SPOOLDRIVERS 52 +#define DIRID_USERPROFILE 53 +#define DIRID_LOADER 54 +#define DIRID_PRINTPROCESSOR 55 + +#define DIRID_DEFAULT DIRID_SYSTEM + +// +// The following DIRIDs are for commonly-used shell "special folders". The +// complete list of such folders is contained in shlobj.h. In that headerfile, +// each folder is assigned a CSIDL_* value. The DIRID values below are created +// by taking the CSIDL value in shlobj.h and OR'ing it with 0x4000. Thus, if +// an INF needs to reference other special folders not defined below, it may +// generate one using the above mechanism, and setupapi will automatically deal +// with it and use the corresponding shell's path where appropriate. (Remember +// that DIRIDs must be specified in decimal, not hex, in an INF when used for +// string substitution.) +// +#define DIRID_COMMON_STARTMENU 16406 // All Users\Start Menu +#define DIRID_COMMON_PROGRAMS 16407 // All Users\Start Menu\Programs +#define DIRID_COMMON_STARTUP 16408 // All Users\Start Menu\Programs\Startup +#define DIRID_COMMON_DESKTOPDIRECTORY 16409 // All Users\Desktop +#define DIRID_COMMON_FAVORITES 16415 // All Users\Favorites +#define DIRID_COMMON_APPDATA 16419 // All Users\Application Data + +#define DIRID_PROGRAM_FILES 16422 // Program Files +#define DIRID_SYSTEM_X86 16425 // system32 for WOW +#define DIRID_PROGRAM_FILES_X86 16426 // Program Files for WOW +#define DIRID_PROGRAM_FILES_COMMON 16427 // Program Files\Common +#define DIRID_PROGRAM_FILES_COMMONX86 16428 // x86 Program Files\Common for WOW + +#define DIRID_COMMON_TEMPLATES 16429 // All Users\Templates +#define DIRID_COMMON_DOCUMENTS 16430 // All Users\Documents + + +// +// First user-definable dirid. See SetupSetDirectoryId(). +// +#define DIRID_USER 0x8000 + + +// +// Setup callback notification routine type +// +typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)( + _In_ PVOID Context, + _In_ UINT Notification, + _In_ UINT_PTR Param1, + _In_ UINT_PTR Param2 + ); + +typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)( + _In_ PVOID Context, + _In_ UINT Notification, + _In_ UINT_PTR Param1, + _In_ UINT_PTR Param2 + ); + +#ifdef UNICODE +#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W +#else +#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A +#endif + + +// +// Operation/queue start/end notification. These are ordinal values. +// +#define SPFILENOTIFY_STARTQUEUE 0x00000001 +#define SPFILENOTIFY_ENDQUEUE 0x00000002 +#define SPFILENOTIFY_STARTSUBQUEUE 0x00000003 +#define SPFILENOTIFY_ENDSUBQUEUE 0x00000004 +#define SPFILENOTIFY_STARTDELETE 0x00000005 +#define SPFILENOTIFY_ENDDELETE 0x00000006 +#define SPFILENOTIFY_DELETEERROR 0x00000007 +#define SPFILENOTIFY_STARTRENAME 0x00000008 +#define SPFILENOTIFY_ENDRENAME 0x00000009 +#define SPFILENOTIFY_RENAMEERROR 0x0000000a +#define SPFILENOTIFY_STARTCOPY 0x0000000b +#define SPFILENOTIFY_ENDCOPY 0x0000000c +#define SPFILENOTIFY_COPYERROR 0x0000000d +#define SPFILENOTIFY_NEEDMEDIA 0x0000000e +#define SPFILENOTIFY_QUEUESCAN 0x0000000f +// +// These are used with SetupIterateCabinet(). +// +#define SPFILENOTIFY_CABINETINFO 0x00000010 +#define SPFILENOTIFY_FILEINCABINET 0x00000011 +#define SPFILENOTIFY_NEEDNEWCABINET 0x00000012 +#define SPFILENOTIFY_FILEEXTRACTED 0x00000013 +#define SPFILENOTIFY_FILEOPDELAYED 0x00000014 +// +// These are used for backup operations +// +#define SPFILENOTIFY_STARTBACKUP 0x00000015 +#define SPFILENOTIFY_BACKUPERROR 0x00000016 +#define SPFILENOTIFY_ENDBACKUP 0x00000017 +// +// Extended notification for SetupScanFileQueue(Flags=SPQ_SCAN_USE_CALLBACKEX) +// +#define SPFILENOTIFY_QUEUESCAN_EX 0x00000018 + +#define SPFILENOTIFY_STARTREGISTRATION 0x00000019 +#define SPFILENOTIFY_ENDREGISTRATION 0x00000020 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Extended notification for SetupScanFileQueue(Flags=SPQ_SCAN_USE_CALLBACK_SIGNERINFO) +// +#define SPFILENOTIFY_QUEUESCAN_SIGNERINFO 0x00000040 + +#endif + +// +// Copy notification. These are bit flags that may be combined. +// +#define SPFILENOTIFY_LANGMISMATCH 0x00010000 +#define SPFILENOTIFY_TARGETEXISTS 0x00020000 +#define SPFILENOTIFY_TARGETNEWER 0x00040000 + +// +// File operation codes and callback outcomes. +// +#define FILEOP_COPY 0 +#define FILEOP_RENAME 1 +#define FILEOP_DELETE 2 +#define FILEOP_BACKUP 3 + +#define FILEOP_ABORT 0 +#define FILEOP_DOIT 1 +#define FILEOP_SKIP 2 +#define FILEOP_RETRY FILEOP_DOIT +#define FILEOP_NEWPATH 4 + +// +// Flags in inf copy sections +// +#define COPYFLG_WARN_IF_SKIP 0x00000001 // warn if user tries to skip file +#define COPYFLG_NOSKIP 0x00000002 // disallow skipping this file +#define COPYFLG_NOVERSIONCHECK 0x00000004 // ignore versions and overwrite target +#define COPYFLG_FORCE_FILE_IN_USE 0x00000008 // force file-in-use behavior +#define COPYFLG_NO_OVERWRITE 0x00000010 // do not copy if file exists on target +#define COPYFLG_NO_VERSION_DIALOG 0x00000020 // do not copy if target is newer +#define COPYFLG_OVERWRITE_OLDER_ONLY 0x00000040 // leave target alone if version same as source +#define COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE 0x00000100 // a Windows driver file to be + // protected as other Windows system files + +#define COPYFLG_REPLACEONLY 0x00000400 // copy only if file exists on target +#define COPYFLG_NODECOMP 0x00000800 // don't attempt to decompress file; copy as-is +#define COPYFLG_REPLACE_BOOT_FILE 0x00001000 // file must be present upon reboot (i.e., it's + // needed by the loader); this flag implies a reboot +#define COPYFLG_NOPRUNE 0x00002000 // never prune this file +#define COPYFLG_IN_USE_TRY_RENAME 0x00004000 // If file in use, try to rename the target first + +// +// Flags in inf delete sections +// New flags go in high word +// +#define DELFLG_IN_USE 0x00000001 // queue in-use file for delete +#define DELFLG_IN_USE1 0x00010000 // high-word version of DELFLG_IN_USE + +// +// Source and file paths. Used when notifying queue callback +// of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR. +// +typedef struct _FILEPATHS_A { + PCSTR Target; + PCSTR Source; // not used for delete operations + UINT Win32Error; + DWORD Flags; // such as SP_COPY_NOSKIP for copy errors +} FILEPATHS_A, *PFILEPATHS_A; + +typedef struct _FILEPATHS_W { + PCWSTR Target; + PCWSTR Source; // not used for delete operations + UINT Win32Error; + DWORD Flags; // such as SP_COPY_NOSKIP for copy errors +} FILEPATHS_W, *PFILEPATHS_W; + +#ifdef UNICODE +typedef FILEPATHS_W FILEPATHS; +typedef PFILEPATHS_W PFILEPATHS; +#else +typedef FILEPATHS_A FILEPATHS; +typedef PFILEPATHS_A PFILEPATHS; +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +typedef struct _FILEPATHS_SIGNERINFO_A { + PCSTR Target; + PCSTR Source; // not used for delete operations + UINT Win32Error; + DWORD Flags; // such as SP_COPY_NOSKIP for copy errors + PCSTR DigitalSigner; + PCSTR Version; + PCSTR CatalogFile; +} FILEPATHS_SIGNERINFO_A, *PFILEPATHS_SIGNERINFO_A; + +typedef struct _FILEPATHS_SIGNERINFO_W { + PCWSTR Target; + PCWSTR Source; // not used for delete operations + UINT Win32Error; + DWORD Flags; // such as SP_COPY_NOSKIP for copy errors + PCWSTR DigitalSigner; + PCWSTR Version; + PCWSTR CatalogFile; +} FILEPATHS_SIGNERINFO_W, *PFILEPATHS_SIGNERINFO_W; + +#ifdef UNICODE +typedef FILEPATHS_SIGNERINFO_W FILEPATHS_SIGNERINFO; +typedef PFILEPATHS_SIGNERINFO_W PFILEPATHS_SIGNERINFO; +#else +typedef FILEPATHS_SIGNERINFO_A FILEPATHS_SIGNERINFO; +typedef PFILEPATHS_SIGNERINFO_A PFILEPATHS_SIGNERINFO; +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Structure used with SPFILENOTIFY_NEEDMEDIA +// +typedef struct _SOURCE_MEDIA_A { + PCSTR Reserved; + PCSTR Tagfile; // may be NULL + PCSTR Description; + // + // Pathname part and filename part of source file + // that caused us to need the media. + // + PCSTR SourcePath; + PCSTR SourceFile; + DWORD Flags; // subset of SP_COPY_xxx +} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A; + +typedef struct _SOURCE_MEDIA_W { + PCWSTR Reserved; + PCWSTR Tagfile; // may be NULL + PCWSTR Description; + // + // Pathname part and filename part of source file + // that caused us to need the media. + // + PCWSTR SourcePath; + PCWSTR SourceFile; + DWORD Flags; // subset of SP_COPY_xxx +} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W; + +#ifdef UNICODE +typedef SOURCE_MEDIA_W SOURCE_MEDIA; +typedef PSOURCE_MEDIA_W PSOURCE_MEDIA; +#else +typedef SOURCE_MEDIA_A SOURCE_MEDIA; +typedef PSOURCE_MEDIA_A PSOURCE_MEDIA; +#endif + +// +// Structure used with SPFILENOTIFY_CABINETINFO and +// SPFILENOTIFY_NEEDNEWCABINET +// +typedef struct _CABINET_INFO_A { + PCSTR CabinetPath; + PCSTR CabinetFile; + PCSTR DiskName; + USHORT SetId; + USHORT CabinetNumber; +} CABINET_INFO_A, *PCABINET_INFO_A; + +typedef struct _CABINET_INFO_W { + PCWSTR CabinetPath; + PCWSTR CabinetFile; + PCWSTR DiskName; + USHORT SetId; + USHORT CabinetNumber; +} CABINET_INFO_W, *PCABINET_INFO_W; + +#ifdef UNICODE +typedef CABINET_INFO_W CABINET_INFO; +typedef PCABINET_INFO_W PCABINET_INFO; +#else +typedef CABINET_INFO_A CABINET_INFO; +typedef PCABINET_INFO_A PCABINET_INFO; +#endif + +// +// Structure used with SPFILENOTIFY_FILEINCABINET +// +typedef struct _FILE_IN_CABINET_INFO_A { + PCSTR NameInCabinet; + DWORD FileSize; + DWORD Win32Error; + WORD DosDate; + WORD DosTime; + WORD DosAttribs; + CHAR FullTargetName[MAX_PATH]; +} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A; + +typedef struct _FILE_IN_CABINET_INFO_W { + PCWSTR NameInCabinet; + DWORD FileSize; + DWORD Win32Error; + WORD DosDate; + WORD DosTime; + WORD DosAttribs; + WCHAR FullTargetName[MAX_PATH]; +} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W; + +#ifdef UNICODE +typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO; +typedef PFILE_IN_CABINET_INFO_W PFILE_IN_CABINET_INFO; +#else +typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO; +typedef PFILE_IN_CABINET_INFO_A PFILE_IN_CABINET_INFO; +#endif + +// +// Structure used for SPFILENOTIFY_***REGISTRATION +// callback +// + +typedef struct _SP_REGISTER_CONTROL_STATUSA { + DWORD cbSize; + PCSTR FileName; + DWORD Win32Error; + DWORD FailureCode; +} SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA; + +typedef struct _SP_REGISTER_CONTROL_STATUSW { + DWORD cbSize; + PCWSTR FileName; + DWORD Win32Error; + DWORD FailureCode; +} SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW; + +#ifdef UNICODE +typedef SP_REGISTER_CONTROL_STATUSW SP_REGISTER_CONTROL_STATUS; +typedef PSP_REGISTER_CONTROL_STATUSW PSP_REGISTER_CONTROL_STATUS; +#else +typedef SP_REGISTER_CONTROL_STATUSA SP_REGISTER_CONTROL_STATUS; +typedef PSP_REGISTER_CONTROL_STATUSA PSP_REGISTER_CONTROL_STATUS; +#endif + + +// +// valid values for SP_REGISTER_CONTROL_STATUS.FailureCode field +// + +#define SPREG_SUCCESS 0x00000000 +#define SPREG_LOADLIBRARY 0x00000001 +#define SPREG_GETPROCADDR 0x00000002 +#define SPREG_REGSVR 0x00000003 +#define SPREG_DLLINSTALL 0x00000004 +#define SPREG_TIMEOUT 0x00000005 +#define SPREG_UNKNOWN 0xFFFFFFFF + +// +// Define type for setup file queue +// +typedef PVOID HSPFILEQ; + +// +// Structure used with SetupQueueCopyIndirect +// +typedef struct _SP_FILE_COPY_PARAMS_A { + DWORD cbSize; + HSPFILEQ QueueHandle; + PCSTR SourceRootPath; OPTIONAL + PCSTR SourcePath; OPTIONAL + PCSTR SourceFilename; + PCSTR SourceDescription; OPTIONAL + PCSTR SourceTagfile; OPTIONAL + PCSTR TargetDirectory; + PCSTR TargetFilename; OPTIONAL + DWORD CopyStyle; + HINF LayoutInf; OPTIONAL + PCSTR SecurityDescriptor; OPTIONAL +} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A; + +typedef struct _SP_FILE_COPY_PARAMS_W { + DWORD cbSize; + HSPFILEQ QueueHandle; + PCWSTR SourceRootPath; OPTIONAL + PCWSTR SourcePath; OPTIONAL + PCWSTR SourceFilename; + PCWSTR SourceDescription; OPTIONAL + PCWSTR SourceTagfile; OPTIONAL + PCWSTR TargetDirectory; + PCWSTR TargetFilename; OPTIONAL + DWORD CopyStyle; + HINF LayoutInf; OPTIONAL + PCWSTR SecurityDescriptor; OPTIONAL +} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W; + +#ifdef UNICODE +typedef SP_FILE_COPY_PARAMS_W SP_FILE_COPY_PARAMS; +typedef PSP_FILE_COPY_PARAMS_W PSP_FILE_COPY_PARAMS; +#else +typedef SP_FILE_COPY_PARAMS_A SP_FILE_COPY_PARAMS; +typedef PSP_FILE_COPY_PARAMS_A PSP_FILE_COPY_PARAMS; +#endif + + +// +// Define type for setup disk space list +// +typedef PVOID HDSKSPC; + +// +// Define type for reference to device information set +// +typedef PVOID HDEVINFO; + +// +// Device information structure (references a device instance +// that is a member of a device information set) +// +typedef struct _SP_DEVINFO_DATA { + DWORD cbSize; + GUID ClassGuid; + DWORD DevInst; // DEVINST handle + ULONG_PTR Reserved; +} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA; + +// +// Device interface information structure (references a device +// interface that is associated with the device information +// element that owns it). +// +typedef struct _SP_DEVICE_INTERFACE_DATA { + DWORD cbSize; + GUID InterfaceClassGuid; + DWORD Flags; + ULONG_PTR Reserved; +} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA; + +// +// Flags for SP_DEVICE_INTERFACE_DATA.Flags field. +// +#define SPINT_ACTIVE 0x00000001 +#define SPINT_DEFAULT 0x00000002 +#define SPINT_REMOVED 0x00000004 + +// +// Backward compatibility--do not use. +// +typedef SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA; +typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA; +#define SPID_ACTIVE SPINT_ACTIVE +#define SPID_DEFAULT SPINT_DEFAULT +#define SPID_REMOVED SPINT_REMOVED + + +typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A { + DWORD cbSize; + CHAR DevicePath[ANYSIZE_ARRAY]; +} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A; + +typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W { + DWORD cbSize; + WCHAR DevicePath[ANYSIZE_ARRAY]; +} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W; + +#ifdef UNICODE +typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA; +typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_DEVICE_INTERFACE_DETAIL_DATA; +#else +typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA; +typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_DEVICE_INTERFACE_DETAIL_DATA; +#endif + +// +// Backward compatibility--do not use. +// +typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W; +typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA_W; +typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A; +typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA_A; +#ifdef UNICODE +typedef SP_INTERFACE_DEVICE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA; +typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA; +#else +typedef SP_INTERFACE_DEVICE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA; +typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA; +#endif + + +// +// Structure for detailed information on a device information set (used for +// SetupDiGetDeviceInfoListDetail which supercedes the functionality of +// SetupDiGetDeviceInfoListClass). +// +typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A { + DWORD cbSize; + GUID ClassGuid; + HANDLE RemoteMachineHandle; + CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; +} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A; + +typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W { + DWORD cbSize; + GUID ClassGuid; + HANDLE RemoteMachineHandle; + WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; +} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W; + +#ifdef UNICODE +typedef SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA; +typedef PSP_DEVINFO_LIST_DETAIL_DATA_W PSP_DEVINFO_LIST_DETAIL_DATA; +#else +typedef SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA; +typedef PSP_DEVINFO_LIST_DETAIL_DATA_A PSP_DEVINFO_LIST_DETAIL_DATA; +#endif + +// +// Class installer function codes +// +#define DIF_SELECTDEVICE 0x00000001 +#define DIF_INSTALLDEVICE 0x00000002 +#define DIF_ASSIGNRESOURCES 0x00000003 +#define DIF_PROPERTIES 0x00000004 +#define DIF_REMOVE 0x00000005 +#define DIF_FIRSTTIMESETUP 0x00000006 +#define DIF_FOUNDDEVICE 0x00000007 +#define DIF_SELECTCLASSDRIVERS 0x00000008 +#define DIF_VALIDATECLASSDRIVERS 0x00000009 +#define DIF_INSTALLCLASSDRIVERS 0x0000000A +#define DIF_CALCDISKSPACE 0x0000000B +#define DIF_DESTROYPRIVATEDATA 0x0000000C +#define DIF_VALIDATEDRIVER 0x0000000D +#define DIF_DETECT 0x0000000F +#define DIF_INSTALLWIZARD 0x00000010 +#define DIF_DESTROYWIZARDDATA 0x00000011 +#define DIF_PROPERTYCHANGE 0x00000012 +#define DIF_ENABLECLASS 0x00000013 +#define DIF_DETECTVERIFY 0x00000014 +#define DIF_INSTALLDEVICEFILES 0x00000015 +#define DIF_UNREMOVE 0x00000016 +#define DIF_SELECTBESTCOMPATDRV 0x00000017 +#define DIF_ALLOW_INSTALL 0x00000018 +#define DIF_REGISTERDEVICE 0x00000019 +#define DIF_NEWDEVICEWIZARD_PRESELECT 0x0000001A +#define DIF_NEWDEVICEWIZARD_SELECT 0x0000001B +#define DIF_NEWDEVICEWIZARD_PREANALYZE 0x0000001C +#define DIF_NEWDEVICEWIZARD_POSTANALYZE 0x0000001D +#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 0x0000001E +#define DIF_UNUSED1 0x0000001F +#define DIF_INSTALLINTERFACES 0x00000020 +#define DIF_DETECTCANCEL 0x00000021 +#define DIF_REGISTER_COINSTALLERS 0x00000022 +#define DIF_ADDPROPERTYPAGE_ADVANCED 0x00000023 +#define DIF_ADDPROPERTYPAGE_BASIC 0x00000024 +#define DIF_RESERVED1 0x00000025 +#define DIF_TROUBLESHOOTER 0x00000026 +#define DIF_POWERMESSAGEWAKE 0x00000027 +#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED 0x00000028 +#define DIF_UPDATEDRIVER_UI 0x00000029 +#define DIF_FINISHINSTALL_ACTION 0x0000002A +#define DIF_RESERVED2 0x00000030 + +// +// Obsoleted DIF codes (do not use) +// +#define DIF_MOVEDEVICE 0x0000000E + + +typedef UINT DI_FUNCTION; // Function type for device installer + + +// +// Device installation parameters structure (associated with a +// particular device information element, or globally with a device +// information set) +// +typedef struct _SP_DEVINSTALL_PARAMS_A { + DWORD cbSize; + DWORD Flags; + DWORD FlagsEx; + HWND hwndParent; + PSP_FILE_CALLBACK InstallMsgHandler; + PVOID InstallMsgHandlerContext; + HSPFILEQ FileQueue; + ULONG_PTR ClassInstallReserved; + DWORD Reserved; + CHAR DriverPath[MAX_PATH]; +} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A; + +typedef struct _SP_DEVINSTALL_PARAMS_W { + DWORD cbSize; + DWORD Flags; + DWORD FlagsEx; + HWND hwndParent; + PSP_FILE_CALLBACK InstallMsgHandler; + PVOID InstallMsgHandlerContext; + HSPFILEQ FileQueue; + ULONG_PTR ClassInstallReserved; + DWORD Reserved; + WCHAR DriverPath[MAX_PATH]; +} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W; + +#ifdef UNICODE +typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS; +typedef PSP_DEVINSTALL_PARAMS_W PSP_DEVINSTALL_PARAMS; +#else +typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS; +typedef PSP_DEVINSTALL_PARAMS_A PSP_DEVINSTALL_PARAMS; +#endif + + +// +// SP_DEVINSTALL_PARAMS.Flags values +// +// Flags for choosing a device +// +#define DI_SHOWOEM 0x00000001L // support Other... button +#define DI_SHOWCOMPAT 0x00000002L // show compatibility list +#define DI_SHOWCLASS 0x00000004L // show class list +#define DI_SHOWALL 0x00000007L // both class & compat list shown +#define DI_NOVCP 0x00000008L // don't create a new copy queue--use + // caller-supplied FileQueue +#define DI_DIDCOMPAT 0x00000010L // Searched for compatible devices +#define DI_DIDCLASS 0x00000020L // Searched for class devices +#define DI_AUTOASSIGNRES 0x00000040L // No UI for resources if possible + +// flags returned by DiInstallDevice to indicate need to reboot/restart +#define DI_NEEDRESTART 0x00000080L // Reboot required to take effect +#define DI_NEEDREBOOT 0x00000100L // "" + +// flags for device installation +#define DI_NOBROWSE 0x00000200L // no Browse... in InsertDisk + +// Flags set by DiBuildDriverInfoList +#define DI_MULTMFGS 0x00000400L // Set if multiple manufacturers in + // class driver list + +// Flag indicates that device is disabled +#define DI_DISABLED 0x00000800L // Set if device disabled + +// Flags for Device/Class Properties +#define DI_GENERALPAGE_ADDED 0x00001000L +#define DI_RESOURCEPAGE_ADDED 0x00002000L + +// Flag to indicate the setting properties for this Device (or class) caused a change +// so the Dev Mgr UI probably needs to be updatd. +#define DI_PROPERTIES_CHANGE 0x00004000L + +// Flag to indicate that the sorting from the INF file should be used. +#define DI_INF_IS_SORTED 0x00008000L + +// Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath +// should be searched. +#define DI_ENUMSINGLEINF 0x00010000L + +// Flag that prevents ConfigMgr from removing/re-enumerating devices during device +// registration, installation, and deletion. +#define DI_DONOTCALLCONFIGMG 0x00020000L + +// The following flag can be used to install a device disabled +#define DI_INSTALLDISABLED 0x00040000L + +// Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver +// list from its existing class driver list, instead of the normal INF search. +#define DI_COMPAT_FROM_CLASS 0x00080000L + +// This flag is set if the Class Install params should be used. +#define DI_CLASSINSTALLPARAMS 0x00100000L + +// This flag is set if the caller of DiCallClassInstaller does NOT +// want the internal default action performed if the Class installer +// returns ERROR_DI_DO_DEFAULT. +#define DI_NODI_DEFAULTACTION 0x00200000L + +// The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the Setup APIs. + +// flags for device installation +#define DI_QUIETINSTALL 0x00800000L // don't confuse the user with + // questions or excess info +#define DI_NOFILECOPY 0x01000000L // No file Copy necessary +#define DI_FORCECOPY 0x02000000L // Force files to be copied from install path +#define DI_DRIVERPAGE_ADDED 0x04000000L // Prop provider added Driver page. +#define DI_USECI_SELECTSTRINGS 0x08000000L // Use Class Installer Provided strings in the Select Device Dlg +#define DI_OVERRIDE_INFFLAGS 0x10000000L // Override INF flags +#define DI_PROPS_NOCHANGEUSAGE 0x20000000L // No Enable/Disable in General Props + +#define DI_NOSELECTICONS 0x40000000L // No small icons in select device dialogs + +#define DI_NOWRITE_IDS 0x80000000L // Don't write HW & Compat IDs on install + + +// +// SP_DEVINSTALL_PARAMS.FlagsEx values +// + +#define DI_FLAGSEX_RESERVED2 0x00000001L // DI_FLAGSEX_USEOLDINFSEARCH is obsolete +#define DI_FLAGSEX_RESERVED3 0x00000002L // DI_FLAGSEX_AUTOSELECTRANK0 is obsolete +#define DI_FLAGSEX_CI_FAILED 0x00000004L // Failed to Load/Call class installer + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN // + +#define DI_FLAGSEX_FINISHINSTALL_ACTION 0x00000008L // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context. + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define DI_FLAGSEX_DIDINFOLIST 0x00000010L // Did the Class Info List +#define DI_FLAGSEX_DIDCOMPATINFO 0x00000020L // Did the Compat Info List + +#define DI_FLAGSEX_FILTERCLASSES 0x00000040L +#define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080L +#define DI_FLAGSEX_DEVICECHANGE 0x00000100L +#define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200L +#define DI_FLAGSEX_PROPCHANGE_PENDING 0x00000400L // One or more device property sheets have had changes made + // to them, and need to have a DIF_PROPERTYCHANGE occur. +#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800L +#define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000L +#define DI_FLAGSEX_USECLASSFORCOMPAT 0x00002000L // Use the device's class when building compat drv list. + // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.) + +#define DI_FLAGSEX_RESERVED4 0x00004000L // DI_FLAGSEX_OLDINF_IN_CLASSLIST is obsolete + +#define DI_FLAGSEX_NO_DRVREG_MODIFY 0x00008000L // Don't run AddReg and DelReg for device's software (driver) key. +#define DI_FLAGSEX_IN_SYSTEM_SETUP 0x00010000L // Installation is occurring during initial system setup. +#define DI_FLAGSEX_INET_DRIVER 0x00020000L // Driver came from Windows Update +#define DI_FLAGSEX_APPENDDRIVERLIST 0x00040000L // Cause SetupDiBuildDriverInfoList to append + // a new driver list to an existing list. +#define DI_FLAGSEX_PREINSTALLBACKUP 0x00080000L // not used +#define DI_FLAGSEX_BACKUPONREPLACE 0x00100000L // not used +#define DI_FLAGSEX_DRIVERLIST_FROM_URL 0x00200000L // build driver list from INF(s) retrieved from URL specified + // in SP_DEVINSTALL_PARAMS.DriverPath (empty string means + // Windows Update website) +#define DI_FLAGSEX_RESERVED1 0x00400000L +#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000L // Don't include old Internet drivers when building + // a driver list. + // Ignored on Windows Vista and later. +#define DI_FLAGSEX_POWERPAGE_ADDED 0x01000000L // class installer added their own power page + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define DI_FLAGSEX_FILTERSIMILARDRIVERS 0x02000000L // only include similar drivers in class list +#define DI_FLAGSEX_INSTALLEDDRIVER 0x04000000L // only add the installed driver to the class or compat + // driver list. Used in calls to SetupDiBuildDriverInfoList +#define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE 0x08000000L // Don't remove identical driver nodes from the class list +#define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH 0x10000000L // Build driver list based on alternate platform information + // specified in associated file queue +#define DI_FLAGSEX_RESTART_DEVICE_ONLY 0x20000000L // only restart the device drivers are being installed on as + // opposed to restarting all devices using those drivers. + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define DI_FLAGSEX_RECURSIVESEARCH 0x40000000L // Tell SetupDiBuildDriverInfoList to do a recursive search +#define DI_FLAGSEX_SEARCH_PUBLISHED_INFS 0x80000000L // Tell SetupDiBuildDriverInfoList to do a "published INF" search + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +// +// Class installation parameters header. This must be the first field of any +// class install parameter structure. The InstallFunction field must be set to +// the function code corresponding to the structure, and the cbSize field must +// be set to the size of the header structure. E.g., +// +// SP_ENABLECLASS_PARAMS EnableClassParams; +// +// EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); +// EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS; +// +typedef struct _SP_CLASSINSTALL_HEADER { + DWORD cbSize; + DI_FUNCTION InstallFunction; +} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER; + + +// +// Structure corresponding to a DIF_ENABLECLASS install function. +// +typedef struct _SP_ENABLECLASS_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + GUID ClassGuid; + DWORD EnableMessage; +} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS; + +#define ENABLECLASS_QUERY 0 +#define ENABLECLASS_SUCCESS 1 +#define ENABLECLASS_FAILURE 2 + + +// +// Values indicating a change in a device's state +// +#define DICS_ENABLE 0x00000001 +#define DICS_DISABLE 0x00000002 +#define DICS_PROPCHANGE 0x00000003 +#define DICS_START 0x00000004 +#define DICS_STOP 0x00000005 +// +// Values specifying the scope of a device property change +// +#define DICS_FLAG_GLOBAL 0x00000001 // make change in all hardware profiles +#define DICS_FLAG_CONFIGSPECIFIC 0x00000002 // make change in specified profile only +#define DICS_FLAG_CONFIGGENERAL 0x00000004 // 1 or more hardware profile-specific + // changes to follow. +// +// Structure corresponding to a DIF_PROPERTYCHANGE install function. +// +typedef struct _SP_PROPCHANGE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD StateChange; + DWORD Scope; + DWORD HwProfile; +} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS; + + +// +// Structure corresponding to a DIF_REMOVE install function. +// +typedef struct _SP_REMOVEDEVICE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Scope; + DWORD HwProfile; +} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS; + +#define DI_REMOVEDEVICE_GLOBAL 0x00000001 +#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002 + + +// +// Structure corresponding to a DIF_UNREMOVE install function. +// +typedef struct _SP_UNREMOVEDEVICE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Scope; + DWORD HwProfile; +} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS; + +#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002 + + +// +// Structure corresponding to a DIF_SELECTDEVICE install function. +// +typedef struct _SP_SELECTDEVICE_PARAMS_A { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + CHAR Title[MAX_TITLE_LEN]; + CHAR Instructions[MAX_INSTRUCTION_LEN]; + CHAR ListLabel[MAX_LABEL_LEN]; + CHAR SubTitle[MAX_SUBTITLE_LEN]; + BYTE Reserved[2]; // DWORD size alignment +} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A; + +typedef struct _SP_SELECTDEVICE_PARAMS_W { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + WCHAR Title[MAX_TITLE_LEN]; + WCHAR Instructions[MAX_INSTRUCTION_LEN]; + WCHAR ListLabel[MAX_LABEL_LEN]; + WCHAR SubTitle[MAX_SUBTITLE_LEN]; +} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W; + +#ifdef UNICODE +typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS; +typedef PSP_SELECTDEVICE_PARAMS_W PSP_SELECTDEVICE_PARAMS; +#else +typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS; +typedef PSP_SELECTDEVICE_PARAMS_A PSP_SELECTDEVICE_PARAMS; +#endif + + +// +// Callback routine for giving progress notification during detection +// +typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)( + _In_ PVOID ProgressNotifyParam, + _In_ DWORD DetectComplete + ); + +// where: +// ProgressNotifyParam - value supplied by caller requesting detection. +// DetectComplete - Percent completion, to be incremented by class +// installer, as it steps thru its detection. +// +// Return Value - If TRUE, then detection is cancelled. Allows caller +// requesting detection to stop detection asap. +// + +// +// Structure corresponding to a DIF_DETECT install function. +// +typedef struct _SP_DETECTDEVICE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + PDETECT_PROGRESS_NOTIFY DetectProgressNotify; + PVOID ProgressNotifyParam; +} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS; + + +// +// 'Add New Device' installation wizard structure (backward-compatibility +// only--respond to DIF_NEWDEVICEWIZARD_* requests instead). +// +// Structure corresponding to a DIF_INSTALLWIZARD install function. +// (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA, +// but DIF_INSTALLWIZARD is the associated function code in the class +// installation parameter structure in both cases.) +// +// Define maximum number of dynamic wizard pages that can be added to +// hardware install wizard. +// +#define MAX_INSTALLWIZARD_DYNAPAGES 20 + +typedef struct _SP_INSTALLWIZARD_DATA { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Flags; + HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; + DWORD NumDynamicPages; + DWORD DynamicPageFlags; + DWORD PrivateFlags; + LPARAM PrivateData; + HWND hwndWizardDlg; +} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA; + +// +// SP_INSTALLWIZARD_DATA.Flags values +// +#define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001 +#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002 +#define NDW_INSTALLFLAG_NEEDRESTART DI_NEEDRESTART +#define NDW_INSTALLFLAG_NEEDREBOOT DI_NEEDREBOOT +#define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200 +#define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400 +#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800 +#define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000 +#define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000 +#define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000 +#define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000 +#define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000 +#define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000 +#define NDW_INSTALLFLAG_USERCANCEL 0x00040000 +#define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000 + + +// +// SP_INSTALLWIZARD_DATA.DynamicPageFlags values +// +// This flag is set if a Class installer has added pages to the install wizard. +// +#define DYNAWIZ_FLAG_PAGESADDED 0x00000001 + +// +// Set this flag if you jump to the analyze page, and want it to +// handle conflicts for you. NOTE. You will not get control back +// in the event of a conflict if you set this flag. +// +#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008 + +// +// The following flags are not used by the Windows NT hardware wizard. +// +#define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002 +#define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004 + + +// +// Reserve a range of wizard page resource IDs for internal use. Some of +// these IDs are for use by class installers that respond to the obsolete +// DIF_INSTALLWIZARD/DIF_DESTROYWIZARDDATA messages. These IDs are listed +// below. +// +#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000 +#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000 + +// +// Define wizard page resource IDs to be used when adding custom pages to the +// hardware install wizard via DIF_INSTALLWIZARD. Pages marked with +// (CLASS INSTALLER PROVIDED) _must_ be supplied by the class installer if it +// responds to the DIF_INSTALLWIZARD request. +// + +// +// Resource ID for the first page that the install wizard will go to after +// adding the class installer pages. (CLASS INSTALLER PROVIDED) +// +#define IDD_DYNAWIZ_FIRSTPAGE 10000 + +// +// Resource ID for the page that the Select Device page will go back to. +// (CLASS INSTALLER PROVIDED) +// +#define IDD_DYNAWIZ_SELECT_PREVPAGE 10001 + +// +// Resource ID for the page that the Select Device page will go forward to. +// (CLASS INSTALLER PROVIDED) +// +#define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002 + +// +// Resource ID for the page that the Analyze dialog should go back to +// This will only be used in the event that there is a problem, and the user +// selects Back from the analyze proc. (CLASS INSTALLER PROVIDED) +// +#define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003 + +// +// Resource ID for the page that the Analyze dialog should go to if it +// continues from the analyze proc. (CLASS INSTALLER PROVIDED) +// +#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004 + +// +// Resource ID of the hardware install wizard's select device page. +// This ID can be used to go directly to the hardware install wizard's select +// device page. (This is the resource ID of the Select Device wizard page +// retrieved via SetupDiGetWizardPage when SPWPT_SELECTDEVICE is the requested +// PageType.) +// +#define IDD_DYNAWIZ_SELECTDEV_PAGE 10009 + +// +// Resource ID of the hardware install wizard's device analysis page. +// This ID can be use to go directly to the hardware install wizard's analysis +// page. +// +#define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010 + +// +// Resource ID of the hardware install wizard's install detected devices page. +// This ID can be use to go directly to the hardware install wizard's install +// detected devices page. +// +#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011 + +// +// Resource ID of the hardware install wizard's select class page. +// This ID can be use to go directly to the hardware install wizard's select +// class page. +// +#define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012 + +// +// The following class installer-provided wizard page resource IDs are not used +// by the Windows NT hardware wizard. +// +#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006 +#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007 +#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008 + + +// +// Structure corresponding to the following DIF_NEWDEVICEWIZARD_* install +// functions: +// +// DIF_NEWDEVICEWIZARD_PRESELECT +// DIF_NEWDEVICEWIZARD_SELECT +// DIF_NEWDEVICEWIZARD_PREANALYZE +// DIF_NEWDEVICEWIZARD_POSTANALYZE +// DIF_NEWDEVICEWIZARD_FINISHINSTALL +// +typedef struct _SP_NEWDEVICEWIZARD_DATA { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Flags; // presently unused--must be zero. + HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; + DWORD NumDynamicPages; + HWND hwndWizardDlg; +} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA; + +// +// The same structure is also used for retrieval of property pages via the +// following install functions: +// +// DIF_ADDPROPERTYPAGE_ADVANCED +// DIF_ADDPROPERTYPAGE_BASIC +// DIF_ADDREMOTEPROPERTYPAGE_ADVANCED +// +typedef SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA; +typedef PSP_NEWDEVICEWIZARD_DATA PSP_ADDPROPERTYPAGE_DATA; + + +// +// Structure corresponding to the DIF_TROUBLESHOOTER install function +// +typedef struct _SP_TROUBLESHOOTER_PARAMS_A { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + CHAR ChmFile[MAX_PATH]; + CHAR HtmlTroubleShooter[MAX_PATH]; +} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A; + +typedef struct _SP_TROUBLESHOOTER_PARAMS_W { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + WCHAR ChmFile[MAX_PATH]; + WCHAR HtmlTroubleShooter[MAX_PATH]; +} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W; + +#ifdef UNICODE +typedef SP_TROUBLESHOOTER_PARAMS_W SP_TROUBLESHOOTER_PARAMS; +typedef PSP_TROUBLESHOOTER_PARAMS_W PSP_TROUBLESHOOTER_PARAMS; +#else +typedef SP_TROUBLESHOOTER_PARAMS_A SP_TROUBLESHOOTER_PARAMS; +typedef PSP_TROUBLESHOOTER_PARAMS_A PSP_TROUBLESHOOTER_PARAMS; +#endif + + +// +// Structure corresponding to the DIF_POWERMESSAGEWAKE install function +// +typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + CHAR PowerMessageWake[LINE_LEN*2]; +} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A; + +typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + WCHAR PowerMessageWake[LINE_LEN*2]; +} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W; + +#ifdef UNICODE +typedef SP_POWERMESSAGEWAKE_PARAMS_W SP_POWERMESSAGEWAKE_PARAMS; +typedef PSP_POWERMESSAGEWAKE_PARAMS_W PSP_POWERMESSAGEWAKE_PARAMS; +#else +typedef SP_POWERMESSAGEWAKE_PARAMS_A SP_POWERMESSAGEWAKE_PARAMS; +typedef PSP_POWERMESSAGEWAKE_PARAMS_A PSP_POWERMESSAGEWAKE_PARAMS; +#endif + +// +// Driver information structure (member of a driver info list that may be associated +// with a particular device instance, or (globally) with a device information set) +// +typedef struct _SP_DRVINFO_DATA_V2_A { + DWORD cbSize; + DWORD DriverType; + ULONG_PTR Reserved; + CHAR Description[LINE_LEN]; + CHAR MfgName[LINE_LEN]; + CHAR ProviderName[LINE_LEN]; + FILETIME DriverDate; + DWORDLONG DriverVersion; +} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A; + +typedef struct _SP_DRVINFO_DATA_V2_W { + DWORD cbSize; + DWORD DriverType; + ULONG_PTR Reserved; + WCHAR Description[LINE_LEN]; + WCHAR MfgName[LINE_LEN]; + WCHAR ProviderName[LINE_LEN]; + FILETIME DriverDate; + DWORDLONG DriverVersion; +} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W; + +// +// Version 1 of the SP_DRVINFO_DATA structures, used only for compatibility +// with Windows NT 4.0/Windows 95/98 SETUPAPI.DLL +// +typedef struct _SP_DRVINFO_DATA_V1_A { + DWORD cbSize; + DWORD DriverType; + ULONG_PTR Reserved; + CHAR Description[LINE_LEN]; + CHAR MfgName[LINE_LEN]; + CHAR ProviderName[LINE_LEN]; +} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A; + +typedef struct _SP_DRVINFO_DATA_V1_W { + DWORD cbSize; + DWORD DriverType; + ULONG_PTR Reserved; + WCHAR Description[LINE_LEN]; + WCHAR MfgName[LINE_LEN]; + WCHAR ProviderName[LINE_LEN]; +} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W; + +#ifdef UNICODE +typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1; +typedef PSP_DRVINFO_DATA_V1_W PSP_DRVINFO_DATA_V1; +typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2; +typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_V2; +#else +typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_V1; +typedef PSP_DRVINFO_DATA_V1_A PSP_DRVINFO_DATA_V1; +typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_V2; +typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_V2; +#endif + +#if USE_SP_DRVINFO_DATA_V1 || (_SETUPAPI_VER < _WIN32_WINNT_WIN2K) // use version 1 driver info data structure + +typedef SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_A; +typedef PSP_DRVINFO_DATA_V1_A PSP_DRVINFO_DATA_A; +typedef SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_W; +typedef PSP_DRVINFO_DATA_V1_W PSP_DRVINFO_DATA_W; +typedef SP_DRVINFO_DATA_V1 SP_DRVINFO_DATA; +typedef PSP_DRVINFO_DATA_V1 PSP_DRVINFO_DATA; + +#else // use version 2 driver info data structure + +typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A; +typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_A; +typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W; +typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_W; +typedef SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA; +typedef PSP_DRVINFO_DATA_V2 PSP_DRVINFO_DATA; + +#endif // use current version of driver info data structure + +// +// Driver information details structure (provides detailed information about a +// particular driver information structure) +// +typedef struct _SP_DRVINFO_DETAIL_DATA_A { + DWORD cbSize; + FILETIME InfDate; + DWORD CompatIDsOffset; + DWORD CompatIDsLength; + ULONG_PTR Reserved; + CHAR SectionName[LINE_LEN]; + CHAR InfFileName[MAX_PATH]; + CHAR DrvDescription[LINE_LEN]; + CHAR HardwareID[ANYSIZE_ARRAY]; +} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A; + +typedef struct _SP_DRVINFO_DETAIL_DATA_W { + DWORD cbSize; + FILETIME InfDate; + DWORD CompatIDsOffset; + DWORD CompatIDsLength; + ULONG_PTR Reserved; + WCHAR SectionName[LINE_LEN]; + WCHAR InfFileName[MAX_PATH]; + WCHAR DrvDescription[LINE_LEN]; + WCHAR HardwareID[ANYSIZE_ARRAY]; +} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W; + +#ifdef UNICODE +typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA; +typedef PSP_DRVINFO_DETAIL_DATA_W PSP_DRVINFO_DETAIL_DATA; +#else +typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA; +typedef PSP_DRVINFO_DETAIL_DATA_A PSP_DRVINFO_DETAIL_DATA; +#endif + + +// +// Driver installation parameters (associated with a particular driver +// information element) +// +typedef struct _SP_DRVINSTALL_PARAMS { + DWORD cbSize; + DWORD Rank; + DWORD Flags; + DWORD_PTR PrivateData; + DWORD Reserved; +} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS; + +// +// SP_DRVINSTALL_PARAMS.Flags values +// + +#define DNF_DUPDESC 0x00000001 // Multiple providers have same desc +#define DNF_OLDDRIVER 0x00000002 // Driver node specifies old/current driver +#define DNF_EXCLUDEFROMLIST 0x00000004 // If set, this driver node will not be + // displayed in any driver select dialogs. +#define DNF_NODRIVER 0x00000008 // if we want to install no driver + // (e.g no mouse drv) +#define DNF_LEGACYINF 0x00000010 // Driver node came from an old-style INF (obsolete) +#define DNF_CLASS_DRIVER 0x00000020 // Driver node represents a class driver +#define DNF_COMPATIBLE_DRIVER 0x00000040 // Driver node represents a compatible driver +#define DNF_INET_DRIVER 0x00000080 // Driver comes from an internet source +#define DNF_UNUSED1 0x00000100 +#define DNF_UNUSED2 0x00000200 +#define DNF_OLD_INET_DRIVER 0x00000400 // Driver came from the Internet, but we don't currently + // have access to it's source files. Never attempt to + // install a driver with this flag! + // Note used on Windows Vista and Later. +#define DNF_BAD_DRIVER 0x00000800 // Driver node should not be used at all +#define DNF_DUPPROVIDER 0x00001000 // Multiple drivers have the same provider and desc + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP +#define DNF_INF_IS_SIGNED 0x00002000 // If file is digitally signed +#define DNF_OEM_F6_INF 0x00004000 // INF specified from F6 during textmode setup. +#define DNF_DUPDRIVERVER 0x00008000 // Multipe drivers have the same desc, provider, and DriverVer values +#define DNF_BASIC_DRIVER 0x00010000 // Driver provides basic functionality, but should + // not be chosen if other signed drivers exist. +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_WS03 +#define DNF_AUTHENTICODE_SIGNED 0x00020000 // Inf file is signed by an Authenticode(tm) catalog. +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WS03 + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN +#define DNF_INSTALLEDDRIVER 0x00040000 // This driver node is currently installed on the device. +#define DNF_ALWAYSEXCLUDEFROMLIST 0x00080000 // If set, this driver is not even displayed in + // alternative platform either. +#define DNF_INBOX_DRIVER 0x00100000 // This driver node came from an INF that shipped with Windows. +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#if _SETUPAPI_VER >= _WIN32_WINNT_WIN7 +#define DNF_REQUESTADDITIONALSOFTWARE 0x00200000 // This driver is only part of a software solution needed + // by this device +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WIN7 + +#define DNF_UNUSED_22 0x00400000 +#define DNF_UNUSED_23 0x00800000 +#define DNF_UNUSED_24 0x01000000 +#define DNF_UNUSED_25 0x02000000 +#define DNF_UNUSED_26 0x04000000 +#define DNF_UNUSED_27 0x08000000 +#define DNF_UNUSED_28 0x10000000 +#define DNF_UNUSED_29 0x20000000 +#define DNF_UNUSED_30 0x40000000 +#define DNF_UNUSED_31 0x80000000 + + +// +// Rank values (the lower the Rank number, the better the Rank) +// +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN +#define DRIVER_HARDWAREID_RANK 0x00000FFF // Any rank less than or equal to + // this value is a gold + // HardwareID match + +#define DRIVER_HARDWAREID_MASK 0x80000FFF // If you mask these bits off (AND) + // from the Rank and the result is 0 + // then the Rank is a trusted HardwareID + // match + +#define DRIVER_UNTRUSTED_RANK 0x80000000 // Any rank with this bit set is an + // "untrusted" rank, meaning that + // the INF was unsigned. + +#define DRIVER_W9X_SUSPECT_RANK 0xC0000000 // Any rank that is greater than + // or equal to this value, and lesser + // than or equal to 0xFFFF is suspected + // to be a Win9x-only driver, because + // (a) it isn't signed, and (b) there + // is no NT-specific decoration to + // explicitly indicate that the INF + // supports Windows NT/2000/XP + +#else +#define DRIVER_HARDWAREID_RANK 0x00000FFF // Any rank less than or equal to + // this value is a trusted + // HardwareID match + +#define DRIVER_COMPATID_RANK 0x00003FFF // Any rank less than or equal to + // this (and greater than + // DRIVER_HARDWAREID_RANK) is a + // trusted CompatibleID match + +#define DRIVER_UNTRUSTED_RANK 0x00008000 // Any rank with this bit set is an + // "untrusted" rank, meaning that + // the INF was unsigned. + +#define DRIVER_UNTRUSTED_HARDWAREID_RANK 0x00008FFF // Any rank less than or equal to + // this value (and greater than + // or equal to DRIVER_UNTRUSTED_RANK) + // is an untrusted HardwareID match + +#define DRIVER_UNTRUSTED_COMPATID_RANK 0x0000BFFF // Any rank less than or equal to + // this value (and greater than + // DRIVER_UNTRUSTED_HARDWAREID_RANK) + // is an untrusted CompatibleID match + +#define DRIVER_W9X_SUSPECT_RANK 0x0000C000 // Any rank that is greater than + // or equal to this value, and lesser + // than or equal to 0xFFFF is suspected + // to be a Win9x-only driver, because + // (a) it isn't signed, and (b) there + // is no NT-specific decoration to + // explicitly indicate that the INF + // supports Windows NT/2000/XP + +#define DRIVER_W9X_SUSPECT_HARDWAREID_RANK 0x0000CFFF // Any rank less than or equal to this + // (and greater than or equal to + // DRIVER_W9X_SUSPECT_RANK) is a + // hardware ID match suspected of being + // only for Windows 9x platforms. + +#define DRIVER_W9X_SUSPECT_COMPATID_RANK 0x0000FFFF // Any rank less than or equal to + // this (and greater than + // DRIVER_W9X_SUSPECT_HARDWAREID_RANK) + // is a compatible ID match suspected + // of being only for Windows 9x + // platforms. +#endif // _SETUPAPI_VER < _WIN32_WINNT_LONGHORN + +// +// Setup callback routine for comparing detection signatures +// +typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA NewDeviceData, + _In_ PSP_DEVINFO_DATA ExistingDeviceData, + _In_opt_ PVOID CompareContext + ); + + +// +// Define context structure handed to co-installers +// +typedef struct _COINSTALLER_CONTEXT_DATA { + BOOL PostProcessing; + DWORD InstallResult; + PVOID PrivateData; +} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA; + + +// +// Structure containing class image list information. +// +typedef struct _SP_CLASSIMAGELIST_DATA { + DWORD cbSize; + HIMAGELIST ImageList; + ULONG_PTR Reserved; +} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA; + + +// +// Structure to be passed as first parameter (LPVOID lpv) to ExtensionPropSheetPageProc +// entry point in setupapi.dll or to "EnumPropPages32" or "BasicProperties32" entry +// points provided by class/device property page providers. Used to retrieve a handle +// (or, potentially, multiple handles) to property pages for a specified property page type. +// +typedef struct _SP_PROPSHEETPAGE_REQUEST { + DWORD cbSize; + DWORD PageRequested; + HDEVINFO DeviceInfoSet; + PSP_DEVINFO_DATA DeviceInfoData; +} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST; + +// +// Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested +// +#define SPPSR_SELECT_DEVICE_RESOURCES 1 // supplied by setupapi.dll +#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2 // supplied by device's BasicProperties32 provider +#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES 3 // supplied by class and/or device's EnumPropPages32 provider + + +// +// Structure used with SetupGetBackupInformation/SetupSetBackupInformation +// +typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_A { + DWORD cbSize; // size of structure + CHAR FullInfPath[MAX_PATH]; // buffer to hold ANSI pathname of INF file + INT FilenameOffset; // offset in CHAR's of filename part (after '\') + CHAR ReinstallInstance[MAX_PATH]; // Instance ID (if present) +} SP_BACKUP_QUEUE_PARAMS_V2_A, *PSP_BACKUP_QUEUE_PARAMS_V2_A; + +typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_W { + DWORD cbSize; // size of structure + WCHAR FullInfPath[MAX_PATH]; // buffer to hold UNICODE pathname of INF file + INT FilenameOffset; // offset in WCHAR's of filename part (after '\') + WCHAR ReinstallInstance[MAX_PATH]; // Instance ID (if present) +} SP_BACKUP_QUEUE_PARAMS_V2_W, *PSP_BACKUP_QUEUE_PARAMS_V2_W; + +// +// Version 1 of the SP_BACKUP_QUEUE_PARAMS structures, used only for compatibility +// with Windows 2000/Windows 95/98/ME SETUPAPI.DLL +// +typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_A { + DWORD cbSize; // size of structure + CHAR FullInfPath[MAX_PATH]; // buffer to hold ANSI pathname of INF file + INT FilenameOffset; // offset in CHAR's of filename part (after '\') +} SP_BACKUP_QUEUE_PARAMS_V1_A, *PSP_BACKUP_QUEUE_PARAMS_V1_A; + +typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_W { + DWORD cbSize; // size of structure + WCHAR FullInfPath[MAX_PATH]; // buffer to hold UNICODE pathname of INF file + INT FilenameOffset; // offset in WCHAR's of filename part (after '\') +} SP_BACKUP_QUEUE_PARAMS_V1_W, *PSP_BACKUP_QUEUE_PARAMS_V1_W; + +#ifdef UNICODE +typedef SP_BACKUP_QUEUE_PARAMS_V1_W SP_BACKUP_QUEUE_PARAMS_V1; +typedef PSP_BACKUP_QUEUE_PARAMS_V1_W PSP_BACKUP_QUEUE_PARAMS_V1; +typedef SP_BACKUP_QUEUE_PARAMS_V2_W SP_BACKUP_QUEUE_PARAMS_V2; +typedef PSP_BACKUP_QUEUE_PARAMS_V2_W PSP_BACKUP_QUEUE_PARAMS_V2; +#else +typedef SP_BACKUP_QUEUE_PARAMS_V1_A SP_BACKUP_QUEUE_PARAMS_V1; +typedef PSP_BACKUP_QUEUE_PARAMS_V1_A PSP_BACKUP_QUEUE_PARAMS_V1; +typedef SP_BACKUP_QUEUE_PARAMS_V2_A SP_BACKUP_QUEUE_PARAMS_V2; +typedef PSP_BACKUP_QUEUE_PARAMS_V2_A PSP_BACKUP_QUEUE_PARAMS_V2; +#endif + + +#if USE_SP_BACKUP_QUEUE_PARAMS_V1 || (_SETUPAPI_VER < _WIN32_WINNT_WINXP) // use version 1 driver info data structure + +typedef SP_BACKUP_QUEUE_PARAMS_V1_A SP_BACKUP_QUEUE_PARAMS_A; +typedef PSP_BACKUP_QUEUE_PARAMS_V1_A PSP_BACKUP_QUEUE_PARAMS_A; +typedef SP_BACKUP_QUEUE_PARAMS_V1_W SP_BACKUP_QUEUE_PARAMS_W; +typedef PSP_BACKUP_QUEUE_PARAMS_V1_W PSP_BACKUP_QUEUE_PARAMS_W; +typedef SP_BACKUP_QUEUE_PARAMS_V1 SP_BACKUP_QUEUE_PARAMS; +typedef PSP_BACKUP_QUEUE_PARAMS_V1 PSP_BACKUP_QUEUE_PARAMS; + +#else // use version 2 driver info data structure + +typedef SP_BACKUP_QUEUE_PARAMS_V2_A SP_BACKUP_QUEUE_PARAMS_A; +typedef PSP_BACKUP_QUEUE_PARAMS_V2_A PSP_BACKUP_QUEUE_PARAMS_A; +typedef SP_BACKUP_QUEUE_PARAMS_V2_W SP_BACKUP_QUEUE_PARAMS_W; +typedef PSP_BACKUP_QUEUE_PARAMS_V2_W PSP_BACKUP_QUEUE_PARAMS_W; +typedef SP_BACKUP_QUEUE_PARAMS_V2 SP_BACKUP_QUEUE_PARAMS; +typedef PSP_BACKUP_QUEUE_PARAMS_V2 PSP_BACKUP_QUEUE_PARAMS; + +#endif // use current version of driver info data structure + + + + + + +#ifndef _SPAPI_ERRORS +#define _SPAPI_ERRORS + +// +// Setupapi-specific error codes +// +// Inf parse outcomes +// +#define ERROR_EXPECTED_SECTION_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0) +#define ERROR_BAD_SECTION_NAME_LINE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1) +#define ERROR_SECTION_NAME_TOO_LONG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2) +#define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3) +// +// Inf runtime errors +// +#define ERROR_WRONG_INF_STYLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100) +#define ERROR_SECTION_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101) +#define ERROR_LINE_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102) +#define ERROR_NO_BACKUP (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103) +// +// Device Installer/other errors +// +#define ERROR_NO_ASSOCIATED_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200) +#define ERROR_CLASS_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201) +#define ERROR_DUPLICATE_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202) +#define ERROR_NO_DRIVER_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203) +#define ERROR_KEY_DOES_NOT_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204) +#define ERROR_INVALID_DEVINST_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205) +#define ERROR_INVALID_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206) +#define ERROR_DEVINST_ALREADY_EXISTS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207) +#define ERROR_DEVINFO_NOT_REGISTERED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208) +#define ERROR_INVALID_REG_PROPERTY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209) +#define ERROR_NO_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A) +#define ERROR_NO_SUCH_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B) +#define ERROR_CANT_LOAD_CLASS_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C) +#define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D) +#define ERROR_DI_DO_DEFAULT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E) +#define ERROR_DI_NOFILECOPY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F) +#define ERROR_INVALID_HWPROFILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210) +#define ERROR_NO_DEVICE_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211) +#define ERROR_DEVINFO_LIST_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212) +#define ERROR_DEVINFO_DATA_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213) +#define ERROR_DI_BAD_PATH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214) +#define ERROR_NO_CLASSINSTALL_PARAMS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215) +#define ERROR_FILEQUEUE_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216) +#define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217) +#define ERROR_NO_CLASS_DRIVER_LIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218) +#define ERROR_NO_ASSOCIATED_SERVICE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219) +#define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A) +#define ERROR_DEVICE_INTERFACE_ACTIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B) +#define ERROR_DEVICE_INTERFACE_REMOVED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C) +#define ERROR_BAD_INTERFACE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D) +#define ERROR_NO_SUCH_INTERFACE_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E) +#define ERROR_INVALID_REFERENCE_STRING (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F) +#define ERROR_INVALID_MACHINENAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220) +#define ERROR_REMOTE_COMM_FAILURE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221) +#define ERROR_MACHINE_UNAVAILABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222) +#define ERROR_NO_CONFIGMGR_SERVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223) +#define ERROR_INVALID_PROPPAGE_PROVIDER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224) +#define ERROR_NO_SUCH_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225) +#define ERROR_DI_POSTPROCESSING_REQUIRED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226) +#define ERROR_INVALID_COINSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227) +#define ERROR_NO_COMPAT_DRIVERS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228) +#define ERROR_NO_DEVICE_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229) +#define ERROR_INVALID_INF_LOGCONFIG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A) +#define ERROR_DI_DONT_INSTALL (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B) +#define ERROR_INVALID_FILTER_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C) +#define ERROR_NON_WINDOWS_NT_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D) +#define ERROR_NON_WINDOWS_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E) +#define ERROR_NO_CATALOG_FOR_OEM_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F) +#define ERROR_DEVINSTALL_QUEUE_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230) +#define ERROR_NOT_DISABLEABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231) +#define ERROR_CANT_REMOVE_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232) +#define ERROR_INVALID_TARGET (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x233) +#define ERROR_DRIVER_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x234) +#define ERROR_IN_WOW64 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235) +#define ERROR_SET_SYSTEM_RESTORE_POINT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x236) + +#define ERROR_SCE_DISABLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x238) +#define ERROR_UNKNOWN_EXCEPTION (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x239) +#define ERROR_PNP_REGISTRY_ERROR (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x23A) +#define ERROR_REMOTE_REQUEST_UNSUPPORTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x23B) +#define ERROR_NOT_AN_INSTALLED_OEM_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x23C) +#define ERROR_INF_IN_USE_BY_DEVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x23D) +#define ERROR_DI_FUNCTION_OBSOLETE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x23E) +#define ERROR_NO_AUTHENTICODE_CATALOG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x23F) +#define ERROR_AUTHENTICODE_DISALLOWED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x240) +#define ERROR_AUTHENTICODE_TRUSTED_PUBLISHER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x241) +#define ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x242) +#define ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x243) +#define ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x244) +#define ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x245) +#define ERROR_DEVICE_INSTALLER_NOT_READY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x246) +#define ERROR_DRIVER_STORE_ADD_FAILED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x247) +#define ERROR_DEVICE_INSTALL_BLOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x248) +#define ERROR_DRIVER_INSTALL_BLOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x249) +#define ERROR_WRONG_INF_TYPE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24A) +#define ERROR_FILE_HASH_NOT_IN_CATALOG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24B) +#define ERROR_DRIVER_STORE_DELETE_FAILED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24C) + +// +// Setupapi exception codes +// +#define ERROR_UNRECOVERABLE_STACK_OVERFLOW (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x300) +#define EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW ERROR_UNRECOVERABLE_STACK_OVERFLOW + +// +// Backward compatibility--do not use. +// +#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE +#define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE +#define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED +#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE + + +// +// Win9x migration DLL error code +// +#define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000) + +#endif // _SPAPI_ERRORS + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupGetInfInformationA( + _In_ LPCVOID InfSpec, + _In_ DWORD SearchControl, + _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PSP_INF_INFORMATION ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupGetInfInformationW( + _In_ LPCVOID InfSpec, + _In_ DWORD SearchControl, + _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PSP_INF_INFORMATION ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +// +// SearchControl flags for SetupGetInfInformation +// +#define INFINFO_INF_SPEC_IS_HINF 1 +#define INFINFO_INF_NAME_IS_ABSOLUTE 2 +#define INFINFO_DEFAULT_SEARCH 3 +#define INFINFO_REVERSE_DEFAULT_SEARCH 4 +#define INFINFO_INF_PATH_LIST_SEARCH 5 + +#ifdef UNICODE +#define SetupGetInfInformation SetupGetInfInformationW +#else +#define SetupGetInfInformation SetupGetInfInformationA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfFileInformationA( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfFileInformationW( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupQueryInfFileInformation SetupQueryInfFileInformationW +#else +#define SetupQueryInfFileInformation SetupQueryInfFileInformationA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfOriginalFileInformationA( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_ PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfOriginalFileInformationW( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_ PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo + ); + +#ifdef UNICODE +#define SetupQueryInfOriginalFileInformation SetupQueryInfOriginalFileInformationW +#else +#define SetupQueryInfOriginalFileInformation SetupQueryInfOriginalFileInformationA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfVersionInformationA( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PCSTR Key, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfVersionInformationW( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PCWSTR Key, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW +#else +#define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA +#endif + + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfDriverStoreLocationA( + _In_ PCSTR FileName, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _In_opt_ PCSTR LocaleName, + _Out_writes_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfDriverStoreLocationW( + _In_ PCWSTR FileName, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _In_opt_ PCWSTR LocaleName, + _Out_writes_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetInfDriverStoreLocation SetupGetInfDriverStoreLocationW +#else +#define SetupGetInfDriverStoreLocation SetupGetInfDriverStoreLocationA +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfPublishedNameA( + _In_ PCSTR DriverStoreLocation, + _Out_writes_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfPublishedNameW( + _In_ PCWSTR DriverStoreLocation, + _Out_writes_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetInfPublishedName SetupGetInfPublishedNameW +#else +#define SetupGetInfPublishedName SetupGetInfPublishedNameA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfFileListA( + _In_opt_ PCSTR DirectoryPath, + _In_ DWORD InfStyle, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfFileListW( + _In_opt_ PCWSTR DirectoryPath, + _In_ DWORD InfStyle, + _Out_writes_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetInfFileList SetupGetInfFileListW +#else +#define SetupGetInfFileList SetupGetInfFileListA +#endif + + +WINSETUPAPI +HINF +WINAPI +SetupOpenInfFileW( + _In_ PCWSTR FileName, + _In_opt_ PCWSTR InfClass, + _In_ DWORD InfStyle, + _Out_opt_ PUINT ErrorLine + ); + +WINSETUPAPI +HINF +WINAPI +SetupOpenInfFileA( + _In_ PCSTR FileName, + _In_opt_ PCSTR InfClass, + _In_ DWORD InfStyle, + _Out_opt_ PUINT ErrorLine + ); + +#ifdef UNICODE +#define SetupOpenInfFile SetupOpenInfFileW +#else +#define SetupOpenInfFile SetupOpenInfFileA +#endif + + +WINSETUPAPI +HINF +WINAPI +SetupOpenMasterInf( + VOID + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupOpenAppendInfFileW( + _In_opt_ PCWSTR FileName, + _In_ HINF InfHandle, + _Out_opt_ PUINT ErrorLine + ); + +WINSETUPAPI +BOOL +WINAPI +SetupOpenAppendInfFileA( + _In_opt_ PCSTR FileName, + _In_ HINF InfHandle, + _Out_opt_ PUINT ErrorLine + ); + +#ifdef UNICODE +#define SetupOpenAppendInfFile SetupOpenAppendInfFileW +#else +#define SetupOpenAppendInfFile SetupOpenAppendInfFileA +#endif + + +WINSETUPAPI +VOID +WINAPI +SetupCloseInfFile( + _In_ HINF InfHandle + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupFindFirstLineA( + _In_ HINF InfHandle, + _In_ PCSTR Section, + _In_opt_ PCSTR Key, + _Out_ PINFCONTEXT Context + ); + +WINSETUPAPI +BOOL +WINAPI +SetupFindFirstLineW( + _In_ HINF InfHandle, + _In_ PCWSTR Section, + _In_opt_ PCWSTR Key, + _Out_ PINFCONTEXT Context + ); + +#ifdef UNICODE +#define SetupFindFirstLine SetupFindFirstLineW +#else +#define SetupFindFirstLine SetupFindFirstLineA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupFindNextLine( + _In_ PINFCONTEXT ContextIn, + _Out_ PINFCONTEXT ContextOut + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupFindNextMatchLineA( + _In_ PINFCONTEXT ContextIn, + _In_opt_ PCSTR Key, + _Out_ PINFCONTEXT ContextOut + ); + +WINSETUPAPI +BOOL +WINAPI +SetupFindNextMatchLineW( + _In_ PINFCONTEXT ContextIn, + _In_opt_ PCWSTR Key, + _Out_ PINFCONTEXT ContextOut + ); + +#ifdef UNICODE +#define SetupFindNextMatchLine SetupFindNextMatchLineW +#else +#define SetupFindNextMatchLine SetupFindNextMatchLineA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupGetLineByIndexA( + _In_ HINF InfHandle, + _In_ PCSTR Section, + _In_ DWORD Index, + _Out_ PINFCONTEXT Context + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetLineByIndexW( + _In_ HINF InfHandle, + _In_ PCWSTR Section, + _In_ DWORD Index, + _Out_ PINFCONTEXT Context + ); + +#ifdef UNICODE +#define SetupGetLineByIndex SetupGetLineByIndexW +#else +#define SetupGetLineByIndex SetupGetLineByIndexA +#endif + + +WINSETUPAPI +LONG +WINAPI +SetupGetLineCountA( + _In_ HINF InfHandle, + _In_ PCSTR Section + ); + +WINSETUPAPI +LONG +WINAPI +SetupGetLineCountW( + _In_ HINF InfHandle, + _In_ PCWSTR Section + ); + +#ifdef UNICODE +#define SetupGetLineCount SetupGetLineCountW +#else +#define SetupGetLineCount SetupGetLineCountA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupGetLineTextA( + _In_opt_ PINFCONTEXT Context, + _In_opt_ HINF InfHandle, + _In_opt_ PCSTR Section, + _In_opt_ PCSTR Key, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetLineTextW( + _In_opt_ PINFCONTEXT Context, + _In_opt_ HINF InfHandle, + _In_opt_ PCWSTR Section, + _In_opt_ PCWSTR Key, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetLineText SetupGetLineTextW +#else +#define SetupGetLineText SetupGetLineTextA +#endif + + +WINSETUPAPI +DWORD +WINAPI +SetupGetFieldCount( + _In_ PINFCONTEXT Context + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupGetStringFieldA( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetStringFieldW( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetStringField SetupGetStringFieldW +#else +#define SetupGetStringField SetupGetStringFieldA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupGetIntField( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_ PINT IntegerValue + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupGetMultiSzFieldA( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ LPDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetMultiSzFieldW( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ LPDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetMultiSzField SetupGetMultiSzFieldW +#else +#define SetupGetMultiSzField SetupGetMultiSzFieldA +#endif + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupGetBinaryField( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PBYTE ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ LPDWORD RequiredSize + ); + +// +// SetupGetFileCompressionInfo is depreciated +// use SetupGetFileCompressionInfoEx instead +// +// ActualSourceFileName returned by SetupGetFileCompressionInfo +// must be freed by the export setupapi!MyFree (NT4+ Win95+) +// or LocalFree (Win2k+) +// +WINSETUPAPI +DWORD +WINAPI +SetupGetFileCompressionInfoA( + _In_ PCSTR SourceFileName, + _Out_ PSTR *ActualSourceFileName, + _Out_ PDWORD SourceFileSize, + _Out_ PDWORD TargetFileSize, + _Out_ PUINT CompressionType + ); + +WINSETUPAPI +DWORD +WINAPI +SetupGetFileCompressionInfoW( + _In_ PCWSTR SourceFileName, + _Out_ PWSTR *ActualSourceFileName, + _Out_ PDWORD SourceFileSize, + _Out_ PDWORD TargetFileSize, + _Out_ PUINT CompressionType + ); + +#ifdef UNICODE +#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW +#else +#define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// SetupGetFileCompressionInfoEx is the preferred API over +// SetupGetFileCompressionInfo. It follows the normal +// conventions of returning BOOL and writing to user-supplied +// buffer. +// + +WINSETUPAPI +BOOL +WINAPI +SetupGetFileCompressionInfoExA( + _In_ PCSTR SourceFileName, + _In_reads_opt_(ActualSourceFileNameBufferLen) PSTR ActualSourceFileNameBuffer, + _In_ DWORD ActualSourceFileNameBufferLen, + _Out_opt_ PDWORD RequiredBufferLen, + _Out_ PDWORD SourceFileSize, + _Out_ PDWORD TargetFileSize, + _Out_ PUINT CompressionType + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetFileCompressionInfoExW( + _In_ PCWSTR SourceFileName, + _In_reads_opt_(ActualSourceFileNameBufferLen) PWSTR ActualSourceFileNameBuffer, + _In_ DWORD ActualSourceFileNameBufferLen, + _Out_opt_ PDWORD RequiredBufferLen, + _Out_ PDWORD SourceFileSize, + _Out_ PDWORD TargetFileSize, + _Out_ PUINT CompressionType + ); + +#ifdef UNICODE +#define SetupGetFileCompressionInfoEx SetupGetFileCompressionInfoExW +#else +#define SetupGetFileCompressionInfoEx SetupGetFileCompressionInfoExA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Compression types +// +#define FILE_COMPRESSION_NONE 0 +#define FILE_COMPRESSION_WINLZA 1 +#define FILE_COMPRESSION_MSZIP 2 +#define FILE_COMPRESSION_NTCAB 3 + + +WINSETUPAPI +DWORD +WINAPI +SetupDecompressOrCopyFileA( + _In_ PCSTR SourceFileName, + _In_ PCSTR TargetFileName, + _In_opt_ PUINT CompressionType + ); + +WINSETUPAPI +DWORD +WINAPI +SetupDecompressOrCopyFileW( + _In_ PCWSTR SourceFileName, + _In_ PCWSTR TargetFileName, + _In_opt_ PUINT CompressionType + ); + +#ifdef UNICODE +#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW +#else +#define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceFileLocationA( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR FileName, + _Out_ PUINT SourceId, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceFileLocationW( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR FileName, + _Out_ PUINT SourceId, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetSourceFileLocation SetupGetSourceFileLocationW +#else +#define SetupGetSourceFileLocation SetupGetSourceFileLocationA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceFileSizeA( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR FileName, + _In_opt_ PCSTR Section, + _Out_ PDWORD FileSize, + _In_ UINT RoundingFactor + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceFileSizeW( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR FileName, + _In_opt_ PCWSTR Section, + _Out_ PDWORD FileSize, + _In_ UINT RoundingFactor + ); + +#ifdef UNICODE +#define SetupGetSourceFileSize SetupGetSourceFileSizeW +#else +#define SetupGetSourceFileSize SetupGetSourceFileSizeA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupGetTargetPathA( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR Section, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetTargetPathW( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR Section, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetTargetPath SetupGetTargetPathW +#else +#define SetupGetTargetPath SetupGetTargetPathA +#endif + + +// +// Define flags for SourceList APIs. +// +#define SRCLIST_TEMPORARY 0x00000001 +#define SRCLIST_NOBROWSE 0x00000002 +#define SRCLIST_SYSTEM 0x00000010 +#define SRCLIST_USER 0x00000020 +#define SRCLIST_SYSIFADMIN 0x00000040 +#define SRCLIST_SUBDIRS 0x00000100 +#define SRCLIST_APPEND 0x00000200 +#define SRCLIST_NOSTRIPPLATFORM 0x00000400 + + +WINSETUPAPI +BOOL +WINAPI +SetupSetSourceListA( + _In_ DWORD Flags, + _In_reads_(SourceCount) PCSTR *SourceList, + _In_ UINT SourceCount + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetSourceListW( + _In_ DWORD Flags, + _In_reads_(SourceCount) PCWSTR *SourceList, + _In_ UINT SourceCount + ); + +#ifdef UNICODE +#define SetupSetSourceList SetupSetSourceListW +#else +#define SetupSetSourceList SetupSetSourceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupCancelTemporarySourceList( + VOID + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupAddToSourceListA( + _In_ DWORD Flags, + _In_ PCSTR Source + ); + +WINSETUPAPI +BOOL +WINAPI +SetupAddToSourceListW( + _In_ DWORD Flags, + _In_ PCWSTR Source + ); + +#ifdef UNICODE +#define SetupAddToSourceList SetupAddToSourceListW +#else +#define SetupAddToSourceList SetupAddToSourceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveFromSourceListA( + _In_ DWORD Flags, + _In_ PCSTR Source + ); + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveFromSourceListW( + _In_ DWORD Flags, + _In_ PCWSTR Source + ); + +#ifdef UNICODE +#define SetupRemoveFromSourceList SetupRemoveFromSourceListW +#else +#define SetupRemoveFromSourceList SetupRemoveFromSourceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQuerySourceListA( + _In_ DWORD Flags, + _Outptr_result_buffer_(*Count) PCSTR **List, + _Out_ PUINT Count + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQuerySourceListW( + _In_ DWORD Flags, + _Outptr_result_buffer_(*Count) PCWSTR **List, + _Out_ PUINT Count + ); + +#ifdef UNICODE +#define SetupQuerySourceList SetupQuerySourceListW +#else +#define SetupQuerySourceList SetupQuerySourceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupFreeSourceListA( + _Inout_ _At_(*List, _Pre_readable_size_(Count) _Post_null_) PCSTR **List, + _In_ UINT Count + ); + +WINSETUPAPI +BOOL +WINAPI +SetupFreeSourceListW( + _Inout_ _At_(*List, _Pre_readable_size_(Count) _Post_null_) PCWSTR **List, + _In_ UINT Count + ); + +#ifdef UNICODE +#define SetupFreeSourceList SetupFreeSourceListW +#else +#define SetupFreeSourceList SetupFreeSourceListA +#endif + + +WINSETUPAPI +UINT +WINAPI +SetupPromptForDiskA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_opt_ PCSTR DiskName, + _In_opt_ PCSTR PathToSource, + _In_ PCSTR FileSought, + _In_opt_ PCSTR TagFile, + _In_ DWORD DiskPromptStyle, + _Out_writes_opt_(PathBufferSize) PSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize + ); + +WINSETUPAPI +UINT +WINAPI +SetupPromptForDiskW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_opt_ PCWSTR DiskName, + _In_opt_ PCWSTR PathToSource, + _In_ PCWSTR FileSought, + _In_opt_ PCWSTR TagFile, + _In_ DWORD DiskPromptStyle, + _Out_writes_opt_(PathBufferSize) PWSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize + ); + +#ifdef UNICODE +#define SetupPromptForDisk SetupPromptForDiskW +#else +#define SetupPromptForDisk SetupPromptForDiskA +#endif + + +WINSETUPAPI +UINT +WINAPI +SetupCopyErrorA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_opt_ PCSTR DiskName, + _In_ PCSTR PathToSource, + _In_ PCSTR SourceFile, + _In_opt_ PCSTR TargetPathFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style, + _Out_writes_opt_(PathBufferSize) PSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize + ); + +WINSETUPAPI +UINT +WINAPI +SetupCopyErrorW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_opt_ PCWSTR DiskName, + _In_ PCWSTR PathToSource, + _In_ PCWSTR SourceFile, + _In_opt_ PCWSTR TargetPathFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style, + _Out_writes_opt_(PathBufferSize) PWSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize + ); + +#ifdef UNICODE +#define SetupCopyError SetupCopyErrorW +#else +#define SetupCopyError SetupCopyErrorA +#endif + + +WINSETUPAPI +UINT +WINAPI +SetupRenameErrorA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_ PCSTR SourceFile, + _In_ PCSTR TargetFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style + ); + +WINSETUPAPI +UINT +WINAPI +SetupRenameErrorW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_ PCWSTR SourceFile, + _In_ PCWSTR TargetFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style + ); + +#ifdef UNICODE +#define SetupRenameError SetupRenameErrorW +#else +#define SetupRenameError SetupRenameErrorA +#endif + + +WINSETUPAPI +UINT +WINAPI +SetupDeleteErrorA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_ PCSTR File, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style + ); + +WINSETUPAPI +UINT +WINAPI +SetupDeleteErrorW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_ PCWSTR File, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style + ); + +#ifdef UNICODE +#define SetupDeleteError SetupDeleteErrorW +#else +#define SetupDeleteError SetupDeleteErrorA +#endif + +WINSETUPAPI +UINT +WINAPI +SetupBackupErrorA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_ PCSTR SourceFile, + _In_opt_ PCSTR TargetFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style + ); + +WINSETUPAPI +UINT +WINAPI +SetupBackupErrorW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_ PCWSTR SourceFile, + _In_opt_ PCWSTR TargetFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style + ); + +#ifdef UNICODE +#define SetupBackupError SetupBackupErrorW +#else +#define SetupBackupError SetupBackupErrorA +#endif + + +// +// Styles for SetupPromptForDisk, SetupCopyError, +// SetupRenameError, SetupDeleteError +// +#define IDF_NOBROWSE 0x00000001 +#define IDF_NOSKIP 0x00000002 +#define IDF_NODETAILS 0x00000004 +#define IDF_NOCOMPRESSED 0x00000008 +#define IDF_CHECKFIRST 0x00000100 +#define IDF_NOBEEP 0x00000200 +#define IDF_NOFOREGROUND 0x00000400 +#define IDF_WARNIFSKIP 0x00000800 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define IDF_NOREMOVABLEMEDIAPROMPT 0x00001000 +#define IDF_USEDISKNAMEASPROMPT 0x00002000 +#define IDF_OEMDISK 0x80000000 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Return values for SetupPromptForDisk, SetupCopyError, +// SetupRenameError, SetupDeleteError, SetupBackupError +// +#define DPROMPT_SUCCESS 0 +#define DPROMPT_CANCEL 1 +#define DPROMPT_SKIPFILE 2 +#define DPROMPT_BUFFERTOOSMALL 3 +#define DPROMPT_OUTOFMEMORY 4 + + +WINSETUPAPI +BOOL +WINAPI +SetupSetDirectoryIdA( + _In_ HINF InfHandle, + _In_ DWORD Id, + _In_opt_ PCSTR Directory + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetDirectoryIdW( + _In_ HINF InfHandle, + _In_ DWORD Id, + _In_opt_ PCWSTR Directory + ); + +#ifdef UNICODE +#define SetupSetDirectoryId SetupSetDirectoryIdW +#else +#define SetupSetDirectoryId SetupSetDirectoryIdA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupSetDirectoryIdExA( + _In_ HINF InfHandle, + _In_ DWORD Id, + _In_opt_ PCSTR Directory, + _In_ DWORD Flags, + _Reserved_ DWORD Reserved1, + _Reserved_ PVOID Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetDirectoryIdExW( + _In_ HINF InfHandle, + _In_ DWORD Id, + _In_opt_ PCWSTR Directory, + _In_ DWORD Flags, + _Reserved_ DWORD Reserved1, + _Reserved_ PVOID Reserved2 + ); + +#ifdef UNICODE +#define SetupSetDirectoryIdEx SetupSetDirectoryIdExW +#else +#define SetupSetDirectoryIdEx SetupSetDirectoryIdExA +#endif + +// +// Flags for SetupSetDirectoryIdEx +// +#define SETDIRID_NOT_FULL_PATH 0x00000001 + + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceInfoA( + _In_ HINF InfHandle, + _In_ UINT SourceId, + _In_ UINT InfoDesired, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceInfoW( + _In_ HINF InfHandle, + _In_ UINT SourceId, + _In_ UINT InfoDesired, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupGetSourceInfo SetupGetSourceInfoW +#else +#define SetupGetSourceInfo SetupGetSourceInfoA +#endif + +// +// InfoDesired values for SetupGetSourceInfo +// + +#define SRCINFO_PATH 1 +#define SRCINFO_TAGFILE 2 +#define SRCINFO_DESCRIPTION 3 +#define SRCINFO_FLAGS 4 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP +// +// SRC_FLAGS allow special treatment of source +// lower 4 bits are reserved for OS use +// the flags may determine what other parameters exist +// +#define SRCINFO_TAGFILE2 5 // alternate tagfile, when SRCINFO_TAGFILE is a cabfile + +#define SRC_FLAGS_CABFILE (0x0010) // if set, treat SRCINFO_TAGFILE as a cabfile and specify alternate tagfile + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFileA( + _In_opt_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR SourceFile, + _In_opt_ PCSTR SourcePathRoot, + _In_opt_ PCSTR DestinationName, + _In_ DWORD CopyStyle, + _In_opt_ PSP_FILE_CALLBACK_A CopyMsgHandler, + _In_opt_ PVOID Context + ); + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFileW( + _In_opt_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR SourceFile, + _In_opt_ PCWSTR SourcePathRoot, + _In_opt_ PCWSTR DestinationName, + _In_ DWORD CopyStyle, + _In_opt_ PSP_FILE_CALLBACK_W CopyMsgHandler, + _In_opt_ PVOID Context + ); + +#ifdef UNICODE +#define SetupInstallFile SetupInstallFileW +#else +#define SetupInstallFile SetupInstallFileA +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFileExA( + _In_opt_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR SourceFile, + _In_opt_ PCSTR SourcePathRoot, + _In_opt_ PCSTR DestinationName, + _In_ DWORD CopyStyle, + _In_opt_ PSP_FILE_CALLBACK_A CopyMsgHandler, + _In_opt_ PVOID Context, + _Out_ PBOOL FileWasInUse + ); + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFileExW( + _In_opt_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR SourceFile, + _In_opt_ PCWSTR SourcePathRoot, + _In_opt_ PCWSTR DestinationName, + _In_ DWORD CopyStyle, + _In_opt_ PSP_FILE_CALLBACK_W CopyMsgHandler, + _In_opt_ PVOID Context, + _Out_ PBOOL FileWasInUse + ); + +#ifdef UNICODE +#define SetupInstallFileEx SetupInstallFileExW +#else +#define SetupInstallFileEx SetupInstallFileExA +#endif + +// +// CopyStyle values for copy and queue-related APIs +// +#define SP_COPY_DELETESOURCE 0x0000001 // delete source file on successful copy +#define SP_COPY_REPLACEONLY 0x0000002 // copy only if target file already present +#define SP_COPY_NEWER 0x0000004 // copy only if source newer than or same as target +#define SP_COPY_NEWER_OR_SAME SP_COPY_NEWER +#define SP_COPY_NOOVERWRITE 0x0000008 // copy only if target doesn't exist +#define SP_COPY_NODECOMP 0x0000010 // don't decompress source file while copying +#define SP_COPY_LANGUAGEAWARE 0x0000020 // don't overwrite file of different language +#define SP_COPY_SOURCE_ABSOLUTE 0x0000040 // SourceFile is a full source path +#define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080 // SourcePathRoot is the full path +#define SP_COPY_IN_USE_NEEDS_REBOOT 0x0000100 // System needs reboot if file in use +#define SP_COPY_FORCE_IN_USE 0x0000200 // Force target-in-use behavior +#define SP_COPY_NOSKIP 0x0000400 // Skip is disallowed for this file or section +#define SP_FLAG_CABINETCONTINUATION 0x0000800 // Used with need media notification +#define SP_COPY_FORCE_NOOVERWRITE 0x0001000 // like NOOVERWRITE but no callback nofitication +#define SP_COPY_FORCE_NEWER 0x0002000 // like NEWER but no callback nofitication +#define SP_COPY_WARNIFSKIP 0x0004000 // system critical file: warn if user tries to skip +#define SP_COPY_NOBROWSE 0x0008000 // Browsing is disallowed for this file or section +#define SP_COPY_NEWER_ONLY 0x0010000 // copy only if source file newer than target +#define SP_COPY_RESERVED 0x0020000 // was: SP_COPY_SOURCE_SIS_MASTER (deprecated) +#define SP_COPY_OEMINF_CATALOG_ONLY 0x0040000 // (SetupCopyOEMInf only) don't copy INF--just catalog +#define SP_COPY_REPLACE_BOOT_FILE 0x0080000 // file must be present upon reboot (i.e., it's + // needed by the loader); this flag implies a reboot +#define SP_COPY_NOPRUNE 0x0100000 // never prune this file + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define SP_COPY_OEM_F6_INF 0x0200000 // Used when calling SetupCopyOemInf + +#endif //_SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define SP_COPY_ALREADYDECOMP 0x0400000 // similar to SP_COPY_NODECOMP + +#endif //_SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define SP_COPY_WINDOWS_SIGNED 0x1000000 // BuildLab or WinSE signed +#define SP_COPY_PNPLOCKED 0x2000000 // Used with the signature flag +#define SP_COPY_IN_USE_TRY_RENAME 0x4000000 // If file in use, try to rename the target first +#define SP_COPY_INBOX_INF 0x8000000 // Referred by CopyFiles of inbox inf + +#endif //_SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#if _SETUPAPI_VER >= _WIN32_WINNT_WIN7 + +#define SP_COPY_HARDLINK 0x10000000 // Copy using hardlink, if possible + +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Flags passed to Backup notification +// +#define SP_BACKUP_BACKUPPASS 0x00000001 // file backed up during backup pass +#define SP_BACKUP_DEMANDPASS 0x00000002 // file backed up on demand +#define SP_BACKUP_SPECIAL 0x00000004 // if set, special type of backup +#define SP_BACKUP_BOOTFILE 0x00000008 // file marked with COPYFLG_REPLACE_BOOT_FILE + + +#endif //_SETUPAPI_VER >= _WIN32_WINNT_WINXP + + +WINSETUPAPI +HSPFILEQ +WINAPI +SetupOpenFileQueue( + VOID + ); + +WINSETUPAPI +BOOL +WINAPI +SetupCloseFileQueue( + _In_ HSPFILEQ QueueHandle + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetFileQueueAlternatePlatformA( + _In_ HSPFILEQ QueueHandle, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _In_opt_ PCSTR AlternateDefaultCatalogFile + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetFileQueueAlternatePlatformW( + _In_ HSPFILEQ QueueHandle, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _In_opt_ PCWSTR AlternateDefaultCatalogFile + ); + +#ifdef UNICODE +#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformW +#else +#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupSetPlatformPathOverrideA( + _In_opt_ PCSTR Override + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetPlatformPathOverrideW( + _In_opt_ PCWSTR Override + ); + +#ifdef UNICODE +#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW +#else +#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueCopyA( + _In_ HSPFILEQ QueueHandle, + _In_opt_ PCSTR SourceRootPath, + _In_opt_ PCSTR SourcePath, + _In_ PCSTR SourceFilename, + _In_opt_ PCSTR SourceDescription, + _In_opt_ PCSTR SourceTagfile, + _In_ PCSTR TargetDirectory, + _In_opt_ PCSTR TargetFilename, + _In_ DWORD CopyStyle + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueCopyW( + _In_ HSPFILEQ QueueHandle, + _In_opt_ PCWSTR SourceRootPath, + _In_opt_ PCWSTR SourcePath, + _In_ PCWSTR SourceFilename, + _In_opt_ PCWSTR SourceDescription, + _In_opt_ PCWSTR SourceTagfile, + _In_ PCWSTR TargetDirectory, + _In_opt_ PCWSTR TargetFilename, + _In_ DWORD CopyStyle + ); + +#ifdef UNICODE +#define SetupQueueCopy SetupQueueCopyW +#else +#define SetupQueueCopy SetupQueueCopyA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueCopyIndirectA( + _In_ PSP_FILE_COPY_PARAMS_A CopyParams + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueCopyIndirectW( + _In_ PSP_FILE_COPY_PARAMS_W CopyParams + ); + +#ifdef UNICODE +#define SetupQueueCopyIndirect SetupQueueCopyIndirectW +#else +#define SetupQueueCopyIndirect SetupQueueCopyIndirectA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueDefaultCopyA( + _In_ HSPFILEQ QueueHandle, + _In_ HINF InfHandle, + _In_opt_ PCSTR SourceRootPath, + _In_ PCSTR SourceFilename, + _In_opt_ PCSTR TargetFilename, + _In_ DWORD CopyStyle + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueDefaultCopyW( + _In_ HSPFILEQ QueueHandle, + _In_ HINF InfHandle, + _In_opt_ PCWSTR SourceRootPath, + _In_ PCWSTR SourceFilename, + _In_opt_ PCWSTR TargetFilename, + _In_ DWORD CopyStyle + ); + +#ifdef UNICODE +#define SetupQueueDefaultCopy SetupQueueDefaultCopyW +#else +#define SetupQueueDefaultCopy SetupQueueDefaultCopyA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueCopySectionA( + _In_ HSPFILEQ QueueHandle, + _In_opt_ PCSTR SourceRootPath, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCSTR Section, + _In_ DWORD CopyStyle + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueCopySectionW( + _In_ HSPFILEQ QueueHandle, + _In_opt_ PCWSTR SourceRootPath, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCWSTR Section, + _In_ DWORD CopyStyle + ); + +#ifdef UNICODE +#define SetupQueueCopySection SetupQueueCopySectionW +#else +#define SetupQueueCopySection SetupQueueCopySectionA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueDeleteA( + _In_ HSPFILEQ QueueHandle, + _In_ PCSTR PathPart1, + _In_opt_ PCSTR PathPart2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueDeleteW( + _In_ HSPFILEQ QueueHandle, + _In_ PCWSTR PathPart1, + _In_opt_ PCWSTR PathPart2 + ); + +#ifdef UNICODE +#define SetupQueueDelete SetupQueueDeleteW +#else +#define SetupQueueDelete SetupQueueDeleteA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueDeleteSectionA( + _In_ HSPFILEQ QueueHandle, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCSTR Section + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueDeleteSectionW( + _In_ HSPFILEQ QueueHandle, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCWSTR Section + ); + +#ifdef UNICODE +#define SetupQueueDeleteSection SetupQueueDeleteSectionW +#else +#define SetupQueueDeleteSection SetupQueueDeleteSectionA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueRenameA( + _In_ HSPFILEQ QueueHandle, + _In_ PCSTR SourcePath, + _In_opt_ PCSTR SourceFilename, + _In_opt_ PCSTR TargetPath, + _In_ PCSTR TargetFilename + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueRenameW( + _In_ HSPFILEQ QueueHandle, + _In_ PCWSTR SourcePath, + _In_opt_ PCWSTR SourceFilename, + _In_opt_ PCWSTR TargetPath, + _In_ PCWSTR TargetFilename + ); + +#ifdef UNICODE +#define SetupQueueRename SetupQueueRenameW +#else +#define SetupQueueRename SetupQueueRenameA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQueueRenameSectionA( + _In_ HSPFILEQ QueueHandle, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCSTR Section + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueueRenameSectionW( + _In_ HSPFILEQ QueueHandle, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCWSTR Section + ); + +#ifdef UNICODE +#define SetupQueueRenameSection SetupQueueRenameSectionW +#else +#define SetupQueueRenameSection SetupQueueRenameSectionA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupCommitFileQueueA( + _In_opt_ HWND Owner, + _In_ HSPFILEQ QueueHandle, + _In_ PSP_FILE_CALLBACK_A MsgHandler, + _In_ PVOID Context + ); + +WINSETUPAPI +BOOL +WINAPI +SetupCommitFileQueueW( + _In_opt_ HWND Owner, + _In_ HSPFILEQ QueueHandle, + _In_ PSP_FILE_CALLBACK_W MsgHandler, + _In_ PVOID Context + ); + +#ifdef UNICODE +#define SetupCommitFileQueue SetupCommitFileQueueW +#else +#define SetupCommitFileQueue SetupCommitFileQueueA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupScanFileQueueA( + _In_ HSPFILEQ FileQueue, + _In_ DWORD Flags, + _In_opt_ HWND Window, + _In_opt_ PSP_FILE_CALLBACK_A CallbackRoutine, + _In_opt_ PVOID CallbackContext, + _Out_ PDWORD Result + ); + +WINSETUPAPI +BOOL +WINAPI +SetupScanFileQueueW( + _In_ HSPFILEQ FileQueue, + _In_ DWORD Flags, + _In_opt_ HWND Window, + _In_opt_ PSP_FILE_CALLBACK_W CallbackRoutine, + _In_opt_ PVOID CallbackContext, + _Out_ PDWORD Result + ); + +#ifdef UNICODE +#define SetupScanFileQueue SetupScanFileQueueW +#else +#define SetupScanFileQueue SetupScanFileQueueA +#endif + +// +// Define flags for SetupScanFileQueue. +// +#define SPQ_SCAN_FILE_PRESENCE 0x00000001 +#define SPQ_SCAN_FILE_VALIDITY 0x00000002 +#define SPQ_SCAN_USE_CALLBACK 0x00000004 +#define SPQ_SCAN_USE_CALLBACKEX 0x00000008 +#define SPQ_SCAN_INFORM_USER 0x00000010 +#define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define SPQ_SCAN_USE_CALLBACK_SIGNERINFO 0x00000040 +#define SPQ_SCAN_PRUNE_DELREN 0x00000080 // remote Delete/Rename queue + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define SPQ_SCAN_FILE_PRESENCE_WITHOUT_SOURCE 0x00000100 +#define SPQ_SCAN_FILE_COMPARISON 0x00000200 +#define SPQ_SCAN_ACTIVATE_DRP 0x00000400 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +// +// Define flags used with Param2 for SPFILENOTIFY_QUEUESCAN +// +#define SPQ_DELAYED_COPY 0x00000001 // file was in use; registered for delayed copy + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupGetFileQueueCount( + _In_ HSPFILEQ FileQueue, + _In_ UINT SubQueueFileOp, + _Out_ PUINT NumOperations + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetFileQueueFlags( + _In_ HSPFILEQ FileQueue, + _Out_ PDWORD Flags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupSetFileQueueFlags( + _In_ HSPFILEQ FileQueue, + _In_ DWORD FlagMask, + _In_ DWORD Flags + ); + +// +// Flags/FlagMask for use with SetupSetFileQueueFlags and returned by SetupGetFileQueueFlags +// +#define SPQ_FLAG_BACKUP_AWARE 0x00000001 // If set, SetupCommitFileQueue will + // issue backup notifications. + +#define SPQ_FLAG_ABORT_IF_UNSIGNED 0x00000002 // If set, SetupCommitFileQueue will + // fail with ERROR_SET_SYSTEM_RESTORE_POINT + // if the user elects to proceed with an + // unsigned queue committal. This allows + // the caller to set a system restore point, + // then re-commit the file queue. + +#define SPQ_FLAG_FILES_MODIFIED 0x00000004 // If set, at least one file was + // replaced by a different version + +#define SPQ_FLAG_DO_SHUFFLEMOVE 0x00000008 // If set then always do a shuffle move. A shuffle + // move will first try to copy the source over the + // destination file, but if the destination file is + // in use it will rename the destination file to a + // temp name and queue the temp name for deletion. + // It will then be free to copy the source to the + // destination name. It is considered an error if + // the destination file can't be renamed for some + // reason. + +#define SPQ_FLAG_VALID 0x0000000F // mask of valid flags (can be passed as FlagMask) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Define OEM Source Type values for use in SetupCopyOEMInf. +// +#define SPOST_NONE 0 +#define SPOST_PATH 1 +#define SPOST_URL 2 +#define SPOST_MAX 3 + +WINSETUPAPI +BOOL +WINAPI +SetupCopyOEMInfA( + _In_ PCSTR SourceInfFileName, + _In_opt_ PCSTR OEMSourceMediaLocation, + _In_ DWORD OEMSourceMediaType, + _In_ DWORD CopyStyle, + _Out_writes_opt_(DestinationInfFileNameSize) PSTR DestinationInfFileName, + _In_ DWORD DestinationInfFileNameSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PSTR *DestinationInfFileNameComponent + ); + +WINSETUPAPI +BOOL +WINAPI +SetupCopyOEMInfW( + _In_ PCWSTR SourceInfFileName, + _In_opt_ PCWSTR OEMSourceMediaLocation, + _In_ DWORD OEMSourceMediaType, + _In_ DWORD CopyStyle, + _Out_writes_opt_(DestinationInfFileNameSize) PWSTR DestinationInfFileName, + _In_ DWORD DestinationInfFileNameSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PWSTR *DestinationInfFileNameComponent + ); + +#ifdef UNICODE +#define SetupCopyOEMInf SetupCopyOEMInfW +#else +#define SetupCopyOEMInf SetupCopyOEMInfA +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Flags used by SetupUninstallOEMInf +// +#define SUOI_FORCEDELETE 0x00000001 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define SUOI_INTERNAL1 0x00000002 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP +WINSETUPAPI +BOOL +WINAPI +SetupUninstallOEMInfA( + _In_ PCSTR InfFileName, + _In_ DWORD Flags, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupUninstallOEMInfW( + _In_ PCWSTR InfFileName, + _In_ DWORD Flags, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupUninstallOEMInf SetupUninstallOEMInfW +#else +#define SetupUninstallOEMInf SetupUninstallOEMInfA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupUninstallNewlyCopiedInfs( + _In_ HSPFILEQ FileQueue, + _In_ DWORD Flags, + _Reserved_ PVOID Reserved + ); + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + + +// +// Disk space list APIs +// +WINSETUPAPI +HDSKSPC +WINAPI +SetupCreateDiskSpaceListA( + _Reserved_ PVOID Reserved1, + _Reserved_ DWORD Reserved2, + _In_ UINT Flags + ); + +WINSETUPAPI +HDSKSPC +WINAPI +SetupCreateDiskSpaceListW( + _Reserved_ PVOID Reserved1, + _Reserved_ DWORD Reserved2, + _In_ UINT Flags + ); + +#ifdef UNICODE +#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListW +#else +#define SetupCreateDiskSpaceList SetupCreateDiskSpaceListA +#endif + +// +// Flags for SetupCreateDiskSpaceList +// +#define SPDSL_IGNORE_DISK 0x00000001 // ignore deletes and on-disk files in copies +#define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002 + + +WINSETUPAPI +HDSKSPC +WINAPI +SetupDuplicateDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _Reserved_ PVOID Reserved1, + _Reserved_ DWORD Reserved2, + _In_ UINT Flags + ); + +WINSETUPAPI +HDSKSPC +WINAPI +SetupDuplicateDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _Reserved_ PVOID Reserved1, + _Reserved_ DWORD Reserved2, + _In_ UINT Flags + ); + +#ifdef UNICODE +#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListW +#else +#define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDestroyDiskSpaceList( + _Inout_ HDSKSPC DiskSpace + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupQueryDrivesInDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryDrivesInDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListW +#else +#define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupQuerySpaceRequiredOnDriveA( + _In_ HDSKSPC DiskSpace, + _In_ PCSTR DriveSpec, + _Out_ LONGLONG *SpaceRequired, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQuerySpaceRequiredOnDriveW( + _In_ HDSKSPC DiskSpace, + _In_ PCWSTR DriveSpec, + _Out_ LONGLONG *SpaceRequired, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveW +#else +#define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupAdjustDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ LPCSTR DriveRoot, + _In_ LONGLONG Amount, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupAdjustDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ LPCWSTR DriveRoot, + _In_ LONGLONG Amount, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListW +#else +#define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupAddToDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ PCSTR TargetFilespec, + _In_ LONGLONG FileSize, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupAddToDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ PCWSTR TargetFilespec, + _In_ LONGLONG FileSize, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListW +#else +#define SetupAddToDiskSpaceList SetupAddToDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupAddSectionToDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCSTR SectionName, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupAddSectionToDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCWSTR SectionName, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListW +#else +#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupAddInstallSectionToDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF LayoutInfHandle, + _In_ PCSTR SectionName, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupAddInstallSectionToDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF LayoutInfHandle, + _In_ PCWSTR SectionName, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListW +#else +#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveFromDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ PCSTR TargetFilespec, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveFromDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ PCWSTR TargetFilespec, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListW +#else +#define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveSectionFromDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCSTR SectionName, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveSectionFromDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF ListInfHandle, + _In_ PCWSTR SectionName, + _In_ UINT Operation, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListW +#else +#define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveInstallSectionFromDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF LayoutInfHandle, + _In_ PCSTR SectionName, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveInstallSectionFromDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _In_ HINF InfHandle, + _In_opt_ HINF LayoutInfHandle, + _In_ PCWSTR SectionName, + _Reserved_ PVOID Reserved1, + _Reserved_ UINT Reserved2 + ); + +#ifdef UNICODE +#define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListW +#else +#define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListA +#endif + + +// +// Cabinet APIs +// + +WINSETUPAPI +BOOL +WINAPI +SetupIterateCabinetA( + _In_ PCSTR CabinetFile, + _Reserved_ DWORD Reserved, + _In_ PSP_FILE_CALLBACK_A MsgHandler, + _In_ PVOID Context + ); + +WINSETUPAPI +BOOL +WINAPI +SetupIterateCabinetW( + _In_ PCWSTR CabinetFile, + _Reserved_ DWORD Reserved, + _In_ PSP_FILE_CALLBACK_W MsgHandler, + _In_ PVOID Context + ); + +#ifdef UNICODE +#define SetupIterateCabinet SetupIterateCabinetW +#else +#define SetupIterateCabinet SetupIterateCabinetA +#endif + + +WINSETUPAPI +INT +WINAPI +SetupPromptReboot( + _In_opt_ HSPFILEQ FileQueue, + _In_opt_ HWND Owner, + _In_ BOOL ScanOnly + ); + +// +// Define flags that are returned by SetupPromptReboot +// +#define SPFILEQ_FILE_IN_USE 0x00000001 +#define SPFILEQ_REBOOT_RECOMMENDED 0x00000002 +#define SPFILEQ_REBOOT_IN_PROGRESS 0x00000004 + + +WINSETUPAPI +PVOID +WINAPI +SetupInitDefaultQueueCallback( + _In_opt_ HWND OwnerWindow + ); + +WINSETUPAPI +PVOID +WINAPI +SetupInitDefaultQueueCallbackEx( + _In_opt_ HWND OwnerWindow, + _In_opt_ HWND AlternateProgressWindow, + _In_ UINT ProgressMessage, + _Reserved_ DWORD Reserved1, + _Reserved_ PVOID Reserved2 + ); + +WINSETUPAPI +VOID +WINAPI +SetupTermDefaultQueueCallback( + _In_ PVOID Context + ); + +WINSETUPAPI +UINT +WINAPI +SetupDefaultQueueCallbackA( + _In_ PVOID Context, + _In_ UINT Notification, + _In_ UINT_PTR Param1, + _In_ UINT_PTR Param2 + ); + +WINSETUPAPI +UINT +WINAPI +SetupDefaultQueueCallbackW( + _In_ PVOID Context, + _In_ UINT Notification, + _In_ UINT_PTR Param1, + _In_ UINT_PTR Param2 + ); + +#ifdef UNICODE +#define SetupDefaultQueueCallback SetupDefaultQueueCallbackW +#else +#define SetupDefaultQueueCallback SetupDefaultQueueCallbackA +#endif + + +// +// Flags for AddReg section lines in INF. The corresponding value +// is in the AddReg line format given below: +// +// ,,,,... +// +// The low word contains basic flags concerning the general data type +// and AddReg action. The high word contains values that more specifically +// identify the data type of the registry value. The high word is ignored +// by the 16-bit Windows 95 SETUPX APIs. +// +// If has FLG_ADDREG_DELREG_BIT set, it will be ignored by AddReg +// (not supported by SetupX). +// + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define FLG_ADDREG_DELREG_BIT ( 0x00008000 ) // if set, interpret as DELREG, see below + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define FLG_ADDREG_BINVALUETYPE ( 0x00000001 ) +#define FLG_ADDREG_NOCLOBBER ( 0x00000002 ) +#define FLG_ADDREG_DELVAL ( 0x00000004 ) +#define FLG_ADDREG_APPEND ( 0x00000008 ) // Currently supported only + // for REG_MULTI_SZ values. +#define FLG_ADDREG_KEYONLY ( 0x00000010 ) // Just create the key, ignore value +#define FLG_ADDREG_OVERWRITEONLY ( 0x00000020 ) // Set only if value already exists + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define FLG_ADDREG_64BITKEY ( 0x00001000 ) // make this change in the 64 bit registry. +#define FLG_ADDREG_KEYONLY_COMMON ( 0x00002000 ) // same as FLG_ADDREG_KEYONLY but also works for DELREG +#define FLG_ADDREG_32BITKEY ( 0x00004000 ) // make this change in the 32 bit registry. + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// The INF may supply any arbitrary data type ordinal in the highword except +// for the following: REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ. If this +// technique is used, then the data is given in binary format, one byte per +// field. +// +#define FLG_ADDREG_TYPE_MASK ( 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE ) +#define FLG_ADDREG_TYPE_SZ ( 0x00000000 ) +#define FLG_ADDREG_TYPE_MULTI_SZ ( 0x00010000 ) +#define FLG_ADDREG_TYPE_EXPAND_SZ ( 0x00020000 ) +#define FLG_ADDREG_TYPE_BINARY ( 0x00000000 | FLG_ADDREG_BINVALUETYPE ) +#define FLG_ADDREG_TYPE_DWORD ( 0x00010000 | FLG_ADDREG_BINVALUETYPE ) +#define FLG_ADDREG_TYPE_NONE ( 0x00020000 | FLG_ADDREG_BINVALUETYPE ) + +#if _SETUPAPI_VER >= _WIN32_WINNT_WIN10 + +#define FLG_ADDREG_TYPE_QWORD ( 0x000B0000 | FLG_ADDREG_BINVALUETYPE ) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WIN10 + +// +// Flags for DelReg section lines in INF. The corresponding value +// is in the extended DelReg line format given below: +// +// ,,,[,...] +// +// In SetupX and some versions of SetupAPI, will be ignored and will +// be deleted. Use with care. +// +// The bits determined by mask FLG_DELREG_TYPE_MASK indicates type of data expected. +// must have FLG_ADDREG_DELREG_BIT set, otherwise it is ignored and specified +// value will be deleted (allowing an AddReg section to also be used as a DelReg section) +// if is not specified, will be deleted (if specified) otherwise +// will be deleted. +// +// the compatability flag +// +#define FLG_DELREG_VALUE (0x00000000) + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define FLG_DELREG_TYPE_MASK FLG_ADDREG_TYPE_MASK // 0xFFFF0001 +#define FLG_DELREG_TYPE_SZ FLG_ADDREG_TYPE_SZ // 0x00000000 +#define FLG_DELREG_TYPE_MULTI_SZ FLG_ADDREG_TYPE_MULTI_SZ // 0x00010000 +#define FLG_DELREG_TYPE_EXPAND_SZ FLG_ADDREG_TYPE_EXPAND_SZ // 0x00020000 +#define FLG_DELREG_TYPE_BINARY FLG_ADDREG_TYPE_BINARY // 0x00000001 +#define FLG_DELREG_TYPE_DWORD FLG_ADDREG_TYPE_DWORD // 0x00010001 +#define FLG_DELREG_TYPE_NONE FLG_ADDREG_TYPE_NONE // 0x00020001 +#define FLG_DELREG_64BITKEY FLG_ADDREG_64BITKEY // 0x00001000 +#define FLG_DELREG_KEYONLY_COMMON FLG_ADDREG_KEYONLY_COMMON // 0x00002000 +#define FLG_DELREG_32BITKEY FLG_ADDREG_32BITKEY // 0x00004000 + +// +// = FLG_DELREG_MULTI_SZ_DELSTRING +// ,,,0x00018002, +// removes all entries matching (case ignored) from multi-sz registry value +// + +#define FLG_DELREG_OPERATION_MASK (0x000000FE) +#define FLG_DELREG_MULTI_SZ_DELSTRING ( FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT | 0x00000002 ) // 0x00018002 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_WIN10 + +#define FLG_DELREG_TYPE_QWORD FLG_ADDREG_TYPE_QWORD // 0x000B0001 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WIN10 + +// +// Flags for BitReg section lines in INF. +// +#define FLG_BITREG_CLEARBITS ( 0x00000000 ) +#define FLG_BITREG_SETBITS ( 0x00000001 ) + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define FLG_BITREG_64BITKEY ( 0x00001000 ) +#define FLG_BITREG_32BITKEY ( 0x00004000 ) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Flags for Ini2Reg section lines in INF. +// +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define FLG_INI2REG_64BITKEY ( 0x00001000 ) +#define FLG_INI2REG_32BITKEY ( 0x00004000 ) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Flags for RegSvr section lines in INF +// +#define FLG_REGSVR_DLLREGISTER ( 0x00000001 ) +#define FLG_REGSVR_DLLINSTALL ( 0x00000002 ) + +// Flags for RegSvr section lines in INF +// + +#define FLG_PROFITEM_CURRENTUSER ( 0x00000001 ) +#define FLG_PROFITEM_DELETE ( 0x00000002 ) +#define FLG_PROFITEM_GROUP ( 0x00000004 ) +#define FLG_PROFITEM_CSIDL ( 0x00000008 ) + +// +// Flags for AddProperty section lines in the INF +// + +#define FLG_ADDPROPERTY_NOCLOBBER ( 0x00000001 ) +#define FLG_ADDPROPERTY_OVERWRITEONLY ( 0x00000002 ) +#define FLG_ADDPROPERTY_APPEND ( 0x00000004 ) +#define FLG_ADDPROPERTY_OR ( 0x00000008 ) +#define FLG_ADDPROPERTY_AND ( 0x00000010 ) + +// +// Flags for DelProperty section lines in the INF +// + +#define FLG_DELPROPERTY_MULTI_SZ_DELSTRING ( 0x00000001 ) + + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFromInfSectionA( + _In_opt_ HWND Owner, + _In_ HINF InfHandle, + _In_ PCSTR SectionName, + _In_ UINT Flags, + _In_opt_ HKEY RelativeKeyRoot, + _In_opt_ PCSTR SourceRootPath, + _In_ UINT CopyFlags, + _In_opt_ PSP_FILE_CALLBACK_A MsgHandler, + _In_opt_ PVOID Context, + _In_opt_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFromInfSectionW( + _In_opt_ HWND Owner, + _In_ HINF InfHandle, + _In_ PCWSTR SectionName, + _In_ UINT Flags, + _In_opt_ HKEY RelativeKeyRoot, + _In_opt_ PCWSTR SourceRootPath, + _In_ UINT CopyFlags, + _In_opt_ PSP_FILE_CALLBACK_W MsgHandler, + _In_opt_ PVOID Context, + _In_opt_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +#ifdef UNICODE +#define SetupInstallFromInfSection SetupInstallFromInfSectionW +#else +#define SetupInstallFromInfSection SetupInstallFromInfSectionA +#endif + +// +// Flags for SetupInstallFromInfSection +// +#define SPINST_LOGCONFIG 0x00000001 +#define SPINST_INIFILES 0x00000002 +#define SPINST_REGISTRY 0x00000004 +#define SPINST_INI2REG 0x00000008 +#define SPINST_FILES 0x00000010 +#define SPINST_BITREG 0x00000020 +#define SPINST_REGSVR 0x00000040 +#define SPINST_UNREGSVR 0x00000080 +#define SPINST_PROFILEITEMS 0x00000100 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define SPINST_COPYINF 0x00000200 + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define SPINST_PROPERTIES 0x00000400 +#define SPINST_ALL 0x000007ff + +#else + +#define SPINST_ALL 0x000003ff + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#else + +#define SPINST_ALL 0x000001ff + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define SPINST_SINGLESECTION 0x00010000 +#define SPINST_LOGCONFIG_IS_FORCED 0x00020000 +#define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define SPINST_REGISTERCALLBACKAWARE 0x00080000 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#define SPINST_DEVICEINSTALL 0x00100000 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFilesFromInfSectionA( + _In_ HINF InfHandle, + _In_opt_ HINF LayoutInfHandle, + _In_ HSPFILEQ FileQueue, + _In_ PCSTR SectionName, + _In_opt_ PCSTR SourceRootPath, + _In_ UINT CopyFlags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupInstallFilesFromInfSectionW( + _In_ HINF InfHandle, + _In_opt_ HINF LayoutInfHandle, + _In_ HSPFILEQ FileQueue, + _In_ PCWSTR SectionName, + _In_opt_ PCWSTR SourceRootPath, + _In_ UINT CopyFlags + ); + +#ifdef UNICODE +#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW +#else +#define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA +#endif + + +// +// Flags for SetupInstallServicesFromInfSection(Ex). These flags are also used +// in the flags field of AddService or DelService lines in a device INF. Some +// of these flags are not permitted in the non-Ex API. These flags are marked +// as such below. +// + +// +// (AddService) move service's tag to front of its group order list +// +#define SPSVCINST_TAGTOFRONT (0x00000001) + +// +// (AddService) **Ex API only** mark this service as the function driver for the +// device being installed +// +#define SPSVCINST_ASSOCSERVICE (0x00000002) + +// +// (DelService) delete the associated event log entry for a service specified in +// a DelService entry +// +#define SPSVCINST_DELETEEVENTLOGENTRY (0x00000004) + +// +// (AddService) don't overwrite display name if it already exists +// +#define SPSVCINST_NOCLOBBER_DISPLAYNAME (0x00000008) + +// +// (AddService) don't overwrite start type value if service already exists +// +#define SPSVCINST_NOCLOBBER_STARTTYPE (0x00000010) + +// +// (AddService) don't overwrite error control value if service already exists +// +#define SPSVCINST_NOCLOBBER_ERRORCONTROL (0x00000020) + +// +// (AddService) don't overwrite load order group if it already exists +// +#define SPSVCINST_NOCLOBBER_LOADORDERGROUP (0x00000040) + +// +// (AddService) don't overwrite dependencies list if it already exists +// +#define SPSVCINST_NOCLOBBER_DEPENDENCIES (0x00000080) + +// +// (AddService) don't overwrite description if it already exists +// +#define SPSVCINST_NOCLOBBER_DESCRIPTION (0x00000100) +// +// (DelService) stop the associated service specified in +// a DelService entry before deleting the service +// +#define SPSVCINST_STOPSERVICE (0x00000200) + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP +// +// (AddService) force overwrite of security settings +// +#define SPSVCINST_CLOBBER_SECURITY (0x00000400) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN +// +// (Start Service) start a service manually after install +// +#define SPSVCINST_STARTSERVICE (0x00000800) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#if _SETUPAPI_VER >= _WIN32_WINNT_WIN7 +// +// (AddService) don't overwrite required privileges list if it already exists +// +#define SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES (0x00001000) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WIN7 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WIN10 +// +// (AddService) don't overwrite triggers if they already exist +// +#define SPSVCINST_NOCLOBBER_TRIGGERS (0x00002000) + +// +// (AddService) don't overwrite service SID type if it already exists +// +#define SPSVCINST_NOCLOBBER_SERVICESIDTYPE (0x00004000) + +// +// (AddService) don't overwrite delayed auto start if it already exists +// +#define SPSVCINST_NOCLOBBER_DELAYEDAUTOSTART (0x00008000) + +// +// (AddService) create service with a unique name +// +#define SPSVCINST_UNIQUE_NAME (0x00010000) + +// +// (AddService) don't overwrite failure actions if they already exist +// +#define SPSVCINST_NOCLOBBER_FAILUREACTIONS (0x00020000) + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WIN10 + +WINSETUPAPI +BOOL +WINAPI +SetupInstallServicesFromInfSectionA( + _In_ HINF InfHandle, + _In_ PCSTR SectionName, + _In_ DWORD Flags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupInstallServicesFromInfSectionW( + _In_ HINF InfHandle, + _In_ PCWSTR SectionName, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW +#else +#define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupInstallServicesFromInfSectionExA( + _In_ HINF InfHandle, + _In_ PCSTR SectionName, + _In_ DWORD Flags, + _In_opt_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Reserved_ PVOID Reserved1, + _Reserved_ PVOID Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupInstallServicesFromInfSectionExW( + _In_ HINF InfHandle, + _In_ PCWSTR SectionName, + _In_ DWORD Flags, + _In_opt_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Reserved_ PVOID Reserved1, + _Reserved_ PVOID Reserved2 + ); + +#ifdef UNICODE +#define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExW +#else +#define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExA +#endif + + + +// +// High level routine, usually used via rundll32.dll +// to perform right-click install action on INFs +// May be called directly: +// +// wsprintf(CmdLineBuffer,TEXT("DefaultInstall 132 %s"),InfPath); +// InstallHinfSection(NULL,NULL,CmdLineBuffer,0); +// +VOID +WINAPI +InstallHinfSectionA( + _In_ HWND Window, + _In_ HINSTANCE ModuleHandle, + _In_ PCSTR CommandLine, + _In_ INT ShowCommand + ); + +VOID +WINAPI +InstallHinfSectionW( + _In_ HWND Window, + _In_ HINSTANCE ModuleHandle, + _In_ PCWSTR CommandLine, + _In_ INT ShowCommand + ); + +#ifdef UNICODE +#define InstallHinfSection InstallHinfSectionW +#else +#define InstallHinfSection InstallHinfSectionA +#endif + + + + + +// +// Define handle type for Setup file log. +// +typedef PVOID HSPFILELOG; + +WINSETUPAPI +HSPFILELOG +WINAPI +SetupInitializeFileLogA( + _In_opt_ PCSTR LogFileName, + _In_ DWORD Flags + ); + +WINSETUPAPI +HSPFILELOG +WINAPI +SetupInitializeFileLogW( + _In_opt_ PCWSTR LogFileName, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupInitializeFileLog SetupInitializeFileLogW +#else +#define SetupInitializeFileLog SetupInitializeFileLogA +#endif + +// +// Flags for SetupInitializeFileLog +// +#define SPFILELOG_SYSTEMLOG 0x00000001 // use system log -- must be Administrator +#define SPFILELOG_FORCENEW 0x00000002 // not valid with SPFILELOG_SYSTEMLOG +#define SPFILELOG_QUERYONLY 0x00000004 // allows non-administrators to read system log + + +WINSETUPAPI +BOOL +WINAPI +SetupTerminateFileLog( + _In_ HSPFILELOG FileLogHandle + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupLogFileA( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCSTR LogSectionName, + _In_ PCSTR SourceFilename, + _In_ PCSTR TargetFilename, + _In_ DWORD Checksum, + _In_opt_ PCSTR DiskTagfile, + _In_opt_ PCSTR DiskDescription, + _In_opt_ PCSTR OtherInfo, + _In_ DWORD Flags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupLogFileW( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCWSTR LogSectionName, + _In_ PCWSTR SourceFilename, + _In_ PCWSTR TargetFilename, + _In_ DWORD Checksum, + _In_opt_ PCWSTR DiskTagfile, + _In_opt_ PCWSTR DiskDescription, + _In_opt_ PCWSTR OtherInfo, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupLogFile SetupLogFileW +#else +#define SetupLogFile SetupLogFileA +#endif + +// +// Flags for SetupLogFile +// +#define SPFILELOG_OEMFILE 0x00000001 + + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveFileLogEntryA( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCSTR LogSectionName, + _In_opt_ PCSTR TargetFilename + ); + +WINSETUPAPI +BOOL +WINAPI +SetupRemoveFileLogEntryW( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCWSTR LogSectionName, + _In_opt_ PCWSTR TargetFilename + ); + +#ifdef UNICODE +#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW +#else +#define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA +#endif + + +// +// Items retrievable from SetupQueryFileLog() +// +typedef enum { + SetupFileLogSourceFilename, + SetupFileLogChecksum, + SetupFileLogDiskTagfile, + SetupFileLogDiskDescription, + SetupFileLogOtherInfo, + SetupFileLogMax +} SetupFileLogInfo; + +WINSETUPAPI +BOOL +WINAPI +SetupQueryFileLogA( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCSTR LogSectionName, + _In_ PCSTR TargetFilename, + _In_ SetupFileLogInfo DesiredInfo, + _Out_writes_opt_(ReturnBufferSize) PSTR DataOut, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryFileLogW( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCWSTR LogSectionName, + _In_ PCWSTR TargetFilename, + _In_ SetupFileLogInfo DesiredInfo, + _Out_writes_opt_(ReturnBufferSize) PWSTR DataOut, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupQueryFileLog SetupQueryFileLogW +#else +#define SetupQueryFileLog SetupQueryFileLogA +#endif + +// +// Text logging APIs +// +#define LogSeverity DWORD +#define LogSevInformation 0x00000000 +#define LogSevWarning 0x00000001 +#define LogSevError 0x00000002 +#define LogSevFatalError 0x00000003 +#define LogSevMaximum 0x00000004 + +WINSETUPAPI +BOOL +WINAPI +SetupOpenLog ( + _In_ BOOL Erase + ); + +WINSETUPAPI +BOOL +WINAPI +SetupLogErrorA ( + _In_ LPCSTR MessageString, + _In_ LogSeverity Severity + ); + +WINSETUPAPI +BOOL +WINAPI +SetupLogErrorW ( + _In_ LPCWSTR MessageString, + _In_ LogSeverity Severity + ); + +#ifdef UNICODE +#define SetupLogError SetupLogErrorW +#else +#define SetupLogError SetupLogErrorA +#endif + +WINSETUPAPI +VOID +WINAPI +SetupCloseLog ( + VOID + ); + +// +// Text log for INF debugging +// + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +WINSETUPAPI +SP_LOG_TOKEN +WINAPI +SetupGetThreadLogToken( + VOID + ); + +WINSETUPAPI +VOID +WINAPI +SetupSetThreadLogToken( + _In_ SP_LOG_TOKEN LogToken + ); + +WINSETUPAPI +VOID +WINAPI +SetupWriteTextLog( + _In_ SP_LOG_TOKEN LogToken, + _In_ DWORD Category, + _In_ DWORD Flags, + _In_ PCSTR MessageStr, + ... + ); + +WINSETUPAPI +VOID +WINAPI +SetupWriteTextLogError( + _In_ SP_LOG_TOKEN LogToken, + _In_ DWORD Category, + _In_ DWORD LogFlags, + _In_ DWORD Error, + _In_ PCSTR MessageStr, + ... + ); + +WINSETUPAPI +VOID +WINAPI +SetupWriteTextLogInfLine( + _In_ SP_LOG_TOKEN LogToken, + _In_ DWORD Flags, + _In_ HINF InfHandle, + _In_ PINFCONTEXT Context + ); + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +// +// Backup Information API's +// + +WINSETUPAPI +BOOL +WINAPI +SetupGetBackupInformationA( + _In_ HSPFILEQ QueueHandle, + _Inout_ PSP_BACKUP_QUEUE_PARAMS_A BackupParams + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetBackupInformationW( + _In_ HSPFILEQ QueueHandle, + _Inout_ PSP_BACKUP_QUEUE_PARAMS_W BackupParams + ); + +#ifdef UNICODE +#define SetupGetBackupInformation SetupGetBackupInformationW +#else +#define SetupGetBackupInformation SetupGetBackupInformationA +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupPrepareQueueForRestoreA( + _In_ HSPFILEQ QueueHandle, + _In_ PCSTR BackupPath, + _In_ DWORD RestoreFlags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupPrepareQueueForRestoreW( + _In_ HSPFILEQ QueueHandle, + _In_ PCWSTR BackupPath, + _In_ DWORD RestoreFlags + ); + +#ifdef UNICODE +#define SetupPrepareQueueForRestore SetupPrepareQueueForRestoreW +#else +#define SetupPrepareQueueForRestore SetupPrepareQueueForRestoreA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Control forcing of Non-Interactive Mode +// Overriden if SetupAPI is run in non-interactive window session +// + +WINSETUPAPI +BOOL +WINAPI +SetupSetNonInteractiveMode( + _In_ BOOL NonInteractiveFlag + ); + +WINSETUPAPI +BOOL +WINAPI +SetupGetNonInteractiveMode( + VOID + ); + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Device Installer APIs +// + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiCreateDeviceInfoList( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ HWND hwndParent + ); + + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiCreateDeviceInfoListExA( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ HWND hwndParent, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiCreateDeviceInfoListExW( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ HWND hwndParent, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExW +#else +#define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInfoListClass( + _In_ HDEVINFO DeviceInfoSet, + _Out_ LPGUID ClassGuid + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInfoListDetailA( + _In_ HDEVINFO DeviceInfoSet, + _Out_ PSP_DEVINFO_LIST_DETAIL_DATA_A DeviceInfoSetDetailData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInfoListDetailW( + _In_ HDEVINFO DeviceInfoSet, + _Out_ PSP_DEVINFO_LIST_DETAIL_DATA_W DeviceInfoSetDetailData + ); + +#ifdef UNICODE +#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailW +#else +#define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailA +#endif + + +// +// Flags for SetupDiCreateDeviceInfo +// +#define DICD_GENERATE_ID 0x00000001 +#define DICD_INHERIT_CLASSDRVS 0x00000002 + +WINSETUPAPI +BOOL +WINAPI +SetupDiCreateDeviceInfoA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PCSTR DeviceName, + _In_ CONST GUID *ClassGuid, + _In_opt_ PCSTR DeviceDescription, + _In_opt_ HWND hwndParent, + _In_ DWORD CreationFlags, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiCreateDeviceInfoW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PCWSTR DeviceName, + _In_ CONST GUID *ClassGuid, + _In_opt_ PCWSTR DeviceDescription, + _In_opt_ HWND hwndParent, + _In_ DWORD CreationFlags, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +#ifdef UNICODE +#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW +#else +#define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA +#endif + + +// +// Flags for SetupDiOpenDeviceInfo +// +#define DIOD_INHERIT_CLASSDRVS 0x00000002 +#define DIOD_CANCEL_REMOVE 0x00000004 + +WINSETUPAPI +BOOL +WINAPI +SetupDiOpenDeviceInfoA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PCSTR DeviceInstanceId, + _In_opt_ HWND hwndParent, + _In_ DWORD OpenFlags, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiOpenDeviceInfoW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PCWSTR DeviceInstanceId, + _In_opt_ HWND hwndParent, + _In_ DWORD OpenFlags, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +#ifdef UNICODE +#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW +#else +#define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInstanceIdA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_opt_(DeviceInstanceIdSize) PSTR DeviceInstanceId, + _In_ DWORD DeviceInstanceIdSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInstanceIdW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_opt_(DeviceInstanceIdSize) PWSTR DeviceInstanceId, + _In_ DWORD DeviceInstanceIdSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW +#else +#define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDeleteDeviceInfo( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiEnumDeviceInfo( + _In_ HDEVINFO DeviceInfoSet, + _In_ DWORD MemberIndex, + _Out_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDestroyDeviceInfoList( + _In_ HDEVINFO DeviceInfoSet + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiEnumDeviceInterfaces( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ CONST GUID *InterfaceClassGuid, + _In_ DWORD MemberIndex, + _Out_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +// +// Backward compatibility--do not use +// +#define SetupDiEnumInterfaceDevice SetupDiEnumDeviceInterfaces + + +WINSETUPAPI +BOOL +WINAPI +SetupDiCreateDeviceInterfaceA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ CONST GUID *InterfaceClassGuid, + _In_opt_ PCSTR ReferenceString, + _In_ DWORD CreationFlags, + _Out_opt_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiCreateDeviceInterfaceW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ CONST GUID *InterfaceClassGuid, + _In_opt_ PCWSTR ReferenceString, + _In_ DWORD CreationFlags, + _Out_opt_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +#ifdef UNICODE +#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceW +#else +#define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceA +#endif + +// +// Backward compatibility--do not use. +// +#define SetupDiCreateInterfaceDeviceW SetupDiCreateDeviceInterfaceW +#define SetupDiCreateInterfaceDeviceA SetupDiCreateDeviceInterfaceA +#ifdef UNICODE +#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceW +#else +#define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceA +#endif + + +// +// Flags for SetupDiOpenDeviceInterface +// +#define DIODI_NO_ADD 0x00000001 + +WINSETUPAPI +BOOL +WINAPI +SetupDiOpenDeviceInterfaceA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PCSTR DevicePath, + _In_ DWORD OpenFlags, + _Out_opt_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiOpenDeviceInterfaceW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PCWSTR DevicePath, + _In_ DWORD OpenFlags, + _Out_opt_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +#ifdef UNICODE +#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceW +#else +#define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceA +#endif + +// +// Backward compatibility--do not use +// +#define SetupDiOpenInterfaceDeviceW SetupDiOpenDeviceInterfaceW +#define SetupDiOpenInterfaceDeviceA SetupDiOpenDeviceInterfaceA +#ifdef UNICODE +#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceW +#else +#define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfaceAlias( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _In_ CONST GUID *AliasInterfaceClassGuid, + _Out_ PSP_DEVICE_INTERFACE_DATA AliasDeviceInterfaceData + ); + +// +// Backward compatibility--do not use. +// +#define SetupDiGetInterfaceDeviceAlias SetupDiGetDeviceInterfaceAlias + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDeleteDeviceInterfaceData( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +// +// Backward compatibility--do not use. +// +#define SetupDiDeleteInterfaceDeviceData SetupDiDeleteDeviceInterfaceData + + +WINSETUPAPI +BOOL +WINAPI +SetupDiRemoveDeviceInterface( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData + ); + +// +// Backward compatibility--do not use. +// +#define SetupDiRemoveInterfaceDevice SetupDiRemoveDeviceInterface + +_Success_(return != FALSE) +_At_((LPSTR)DeviceInterfaceDetailData->DevicePath, _Post_z_) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfaceDetailA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Inout_updates_bytes_to_opt_(DeviceInterfaceDetailDataSize, *RequiredSize) PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData, + _In_ DWORD DeviceInterfaceDetailDataSize, + _Out_opt_ _Out_range_(>=, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A)) PDWORD RequiredSize, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +_Success_(return != FALSE) +_At_((LPWSTR)DeviceInterfaceDetailData->DevicePath, _Post_z_) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfaceDetailW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Out_writes_bytes_to_opt_(DeviceInterfaceDetailDataSize, *RequiredSize) PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData, + _In_ DWORD DeviceInterfaceDetailDataSize, + _Out_opt_ _Out_range_(>=, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W)) PDWORD RequiredSize, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + +#ifdef UNICODE +#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailW +#else +#define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailA +#endif + +// +// Backward compatibility--do not use. +// +#define SetupDiGetInterfaceDeviceDetailW SetupDiGetDeviceInterfaceDetailW +#define SetupDiGetInterfaceDeviceDetailA SetupDiGetDeviceInterfaceDetailA +#ifdef UNICODE +#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailW +#else +#define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailA +#endif + + +// +// Default install handler for DIF_INSTALLINTERFACES. +// +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallDeviceInterfaces( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData + ); + +// +// Backward compatibility--do not use. +// +#define SetupDiInstallInterfaceDevices SetupDiInstallDeviceInterfaces + + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceInterfaceDefault( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _In_ DWORD Flags, + _Reserved_ PVOID Reserved + ); + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + + +// +// Default install handler for DIF_REGISTERDEVICE +// + +// +// Flags for SetupDiRegisterDeviceInfo +// +#define SPRDI_FIND_DUPS 0x00000001 + +WINSETUPAPI +BOOL +WINAPI +SetupDiRegisterDeviceInfo( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Flags, + _In_opt_ PSP_DETSIG_CMPPROC CompareProc, + _In_opt_ PVOID CompareContext, + _Out_opt_ PSP_DEVINFO_DATA DupDeviceInfoData + ); + + +// +// Ordinal values distinguishing between class drivers and +// device drivers. +// (Passed in 'DriverType' parameter of driver information list APIs) +// +#define SPDIT_NODRIVER 0x00000000 +#define SPDIT_CLASSDRIVER 0x00000001 +#define SPDIT_COMPATDRIVER 0x00000002 + +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildDriverInfoList( + _In_ HDEVINFO DeviceInfoSet, + _Inout_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD DriverType + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiCancelDriverInfoSearch( + _In_ HDEVINFO DeviceInfoSet + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiEnumDriverInfoA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD DriverType, + _In_ DWORD MemberIndex, + _Out_ PSP_DRVINFO_DATA_A DriverInfoData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiEnumDriverInfoW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD DriverType, + _In_ DWORD MemberIndex, + _Out_ PSP_DRVINFO_DATA_W DriverInfoData + ); + +#ifdef UNICODE +#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW +#else +#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetSelectedDriverA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_ PSP_DRVINFO_DATA_A DriverInfoData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetSelectedDriverW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_ PSP_DRVINFO_DATA_W DriverInfoData + ); + +#ifdef UNICODE +#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW +#else +#define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetSelectedDriverA( + _In_ HDEVINFO DeviceInfoSet, + _Inout_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Inout_opt_ PSP_DRVINFO_DATA_A DriverInfoData + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetSelectedDriverW( + _In_ HDEVINFO DeviceInfoSet, + _Inout_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Inout_opt_ PSP_DRVINFO_DATA_W DriverInfoData + ); + +#ifdef UNICODE +#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW +#else +#define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDriverInfoDetailA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_A DriverInfoData, + _Inout_updates_bytes_opt_(DriverInfoDetailDataSize) PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData, + _In_ DWORD DriverInfoDetailDataSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDriverInfoDetailW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_W DriverInfoData, + _Inout_updates_bytes_opt_(DriverInfoDetailDataSize) PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData, + _In_ DWORD DriverInfoDetailDataSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW +#else +#define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDestroyDriverInfoList( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD DriverType + ); + + +// +// Flags controlling what is included in the device information set built +// by SetupDiGetClassDevs +// +#define DIGCF_DEFAULT 0x00000001 // only valid with DIGCF_DEVICEINTERFACE +#define DIGCF_PRESENT 0x00000002 +#define DIGCF_ALLCLASSES 0x00000004 +#define DIGCF_PROFILE 0x00000008 +#define DIGCF_DEVICEINTERFACE 0x00000010 + +// +// Backward compatibility--do not use. +// +#define DIGCF_INTERFACEDEVICE DIGCF_DEVICEINTERFACE + + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiGetClassDevsA( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ PCSTR Enumerator, + _In_opt_ HWND hwndParent, + _In_ DWORD Flags + ); + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiGetClassDevsW( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ PCWSTR Enumerator, + _In_opt_ HWND hwndParent, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiGetClassDevs SetupDiGetClassDevsW +#else +#define SetupDiGetClassDevs SetupDiGetClassDevsA +#endif + + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiGetClassDevsExA( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ PCSTR Enumerator, + _In_opt_ HWND hwndParent, + _In_ DWORD Flags, + _In_opt_ HDEVINFO DeviceInfoSet, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Check_return_ +WINSETUPAPI +HDEVINFO +WINAPI +SetupDiGetClassDevsExW( + _In_opt_ CONST GUID *ClassGuid, + _In_opt_ PCWSTR Enumerator, + _In_opt_ HWND hwndParent, + _In_ DWORD Flags, + _In_opt_ HDEVINFO DeviceInfoSet, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetClassDevsEx SetupDiGetClassDevsExW +#else +#define SetupDiGetClassDevsEx SetupDiGetClassDevsExA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetINFClassA( + _In_ PCSTR InfName, + _Out_ LPGUID ClassGuid, + _Out_writes_(ClassNameSize) PSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetINFClassW( + _In_ PCWSTR InfName, + _Out_ LPGUID ClassGuid, + _Out_writes_(ClassNameSize) PWSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetINFClass SetupDiGetINFClassW +#else +#define SetupDiGetINFClass SetupDiGetINFClassA +#endif + + +// +// Flags controlling exclusion from the class information list built +// by SetupDiBuildClassInfoList(Ex) +// +#define DIBCI_NOINSTALLCLASS 0x00000001 +#define DIBCI_NODISPLAYCLASS 0x00000002 + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildClassInfoList( + _In_ DWORD Flags, + _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildClassInfoListExA( + _In_ DWORD Flags, + _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildClassInfoListExW( + _In_ DWORD Flags, + _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExW +#else +#define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PWSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetClassDescription SetupDiGetClassDescriptionW +#else +#define SetupDiGetClassDescription SetupDiGetClassDescriptionA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionExA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionExW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PWSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExW +#else +#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiCallClassInstaller( + _In_ DI_FUNCTION InstallFunction, + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_SELECTDEVICE +// +WINSETUPAPI +BOOL +WINAPI +SetupDiSelectDevice( + _In_ HDEVINFO DeviceInfoSet, + _Inout_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_SELECTBESTCOMPATDRV +// +WINSETUPAPI +BOOL +WINAPI +SetupDiSelectBestCompatDrv( + _In_ HDEVINFO DeviceInfoSet, + _Inout_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_INSTALLDEVICE +// +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallDevice( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_INSTALLDEVICEFILES +// +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallDriverFiles( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_REGISTER_COINSTALLERS +// +WINSETUPAPI +BOOL +WINAPI +SetupDiRegisterCoDeviceInstallers( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_REMOVE +// +WINSETUPAPI +BOOL +WINAPI +SetupDiRemoveDevice( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +// +// Default install handler for DIF_UNREMOVE +// +WINSETUPAPI +BOOL +WINAPI +SetupDiUnremoveDevice( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData + ); + +#if _SETUPAPI_VER >= _WIN32_WINNT_WS03 + +WINSETUPAPI +BOOL +WINAPI +SetupDiRestartDevices( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData + ); + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WS03 + +// +// Default install handler for DIF_PROPERTYCHANGE +// +WINSETUPAPI +BOOL +WINAPI +SetupDiChangeState( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallClassA( + _In_opt_ HWND hwndParent, + _In_ PCSTR InfFileName, + _In_ DWORD Flags, + _In_opt_ HSPFILEQ FileQueue + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallClassW( + _In_opt_ HWND hwndParent, + _In_ PCWSTR InfFileName, + _In_ DWORD Flags, + _In_opt_ HSPFILEQ FileQueue + ); + +#ifdef UNICODE +#define SetupDiInstallClass SetupDiInstallClassW +#else +#define SetupDiInstallClass SetupDiInstallClassA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallClassExA( + _In_opt_ HWND hwndParent, + _In_opt_ PCSTR InfFileName, + _In_ DWORD Flags, + _In_opt_ HSPFILEQ FileQueue, + _In_opt_ CONST GUID *InterfaceClassGuid, + _Reserved_ PVOID Reserved1, + _Reserved_ PVOID Reserved2 + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiInstallClassExW( + _In_opt_ HWND hwndParent, + _In_opt_ PCWSTR InfFileName, + _In_ DWORD Flags, + _In_opt_ HSPFILEQ FileQueue, + _In_opt_ CONST GUID *InterfaceClassGuid, + _Reserved_ PVOID Reserved1, + _Reserved_ PVOID Reserved2 + ); + +#ifdef UNICODE +#define SetupDiInstallClassEx SetupDiInstallClassExW +#else +#define SetupDiInstallClassEx SetupDiInstallClassExA +#endif + + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiOpenClassRegKey( + _In_opt_ CONST GUID *ClassGuid, + _In_ REGSAM samDesired + ); + + +// +// Flags for SetupDiOpenClassRegKeyEx +// +#define DIOCR_INSTALLER 0x00000001 // class installer registry branch +#define DIOCR_INTERFACE 0x00000002 // interface class registry branch + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiOpenClassRegKeyExA( + _In_opt_ CONST GUID *ClassGuid, + _In_ REGSAM samDesired, + _In_ DWORD Flags, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiOpenClassRegKeyExW( + _In_opt_ CONST GUID *ClassGuid, + _In_ REGSAM samDesired, + _In_ DWORD Flags, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExW +#else +#define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExA +#endif + + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiCreateDeviceInterfaceRegKeyA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Reserved_ DWORD Reserved, + _In_ REGSAM samDesired, + _In_opt_ HINF InfHandle, + _In_opt_ PCSTR InfSectionName + ); + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiCreateDeviceInterfaceRegKeyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Reserved_ DWORD Reserved, + _In_ REGSAM samDesired, + _In_opt_ HINF InfHandle, + _In_opt_ PCWSTR InfSectionName + ); + +#ifdef UNICODE +#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyW +#else +#define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyA +#endif + +// +// Backward compatibility--do not use. +// +#define SetupDiCreateInterfaceDeviceRegKeyW SetupDiCreateDeviceInterfaceRegKeyW +#define SetupDiCreateInterfaceDeviceRegKeyA SetupDiCreateDeviceInterfaceRegKeyA +#ifdef UNICODE +#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyW +#else +#define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyA +#endif + + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiOpenDeviceInterfaceRegKey( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Reserved_ DWORD Reserved, + _In_ REGSAM samDesired + ); + +// +// Backward compatibility--do not use. +// +#define SetupDiOpenInterfaceDeviceRegKey SetupDiOpenDeviceInterfaceRegKey + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDeleteDeviceInterfaceRegKey( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Reserved_ DWORD Reserved + ); + +// +// Backward compatibility--do not use. +// +#define SetupDiDeleteInterfaceDeviceRegKey SetupDiDeleteDeviceInterfaceRegKey + + +// +// KeyType values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and +// SetupDiDeleteDevRegKey. +// +#define DIREG_DEV 0x00000001 // Open/Create/Delete device key +#define DIREG_DRV 0x00000002 // Open/Create/Delete driver key +#define DIREG_BOTH 0x00000004 // Delete both driver and Device key + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiCreateDevRegKeyA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Scope, + _In_ DWORD HwProfile, + _In_ DWORD KeyType, + _In_opt_ HINF InfHandle, + _In_opt_ PCSTR InfSectionName + ); + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiCreateDevRegKeyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Scope, + _In_ DWORD HwProfile, + _In_ DWORD KeyType, + _In_opt_ HINF InfHandle, + _In_opt_ PCWSTR InfSectionName + ); + +#ifdef UNICODE +#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW +#else +#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA +#endif + + +_Check_return_ +WINSETUPAPI +HKEY +WINAPI +SetupDiOpenDevRegKey( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Scope, + _In_ DWORD HwProfile, + _In_ DWORD KeyType, + _In_ REGSAM samDesired + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDeleteDevRegKey( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Scope, + _In_ DWORD HwProfile, + _In_ DWORD KeyType + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileList( + _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList, + _In_ DWORD HwProfileListSize, + _Out_ PDWORD RequiredSize, + _Out_opt_ PDWORD CurrentlyActiveIndex + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileListExA( + _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList, + _In_ DWORD HwProfileListSize, + _Out_ PDWORD RequiredSize, + _Out_opt_ PDWORD CurrentlyActiveIndex, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileListExW( + _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList, + _In_ DWORD HwProfileListSize, + _Out_ PDWORD RequiredSize, + _Out_opt_ PDWORD CurrentlyActiveIndex, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExW +#else +#define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExA +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDevicePropertyKeys( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_opt_(PropertyKeyCount) DEVPROPKEY *PropertyKeyArray, + _In_ DWORD PropertyKeyCount, + _Out_opt_ PDWORD RequiredPropertyKeyCount, + _In_ DWORD Flags + ); + +_Success_(return != FALSE) +_When_(*PropertyType == DEVPROP_TYPE_STRING, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_INDIRECT, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_LIST, _At_((PZZWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDevicePropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ CONST DEVPROPKEY *PropertyKey, + _Out_ DEVPROPTYPE *PropertyType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiGetDeviceProperty SetupDiGetDevicePropertyW +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDevicePropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ CONST DEVPROPKEY *PropertyKey, + _In_ DEVPROPTYPE PropertyType, + _In_reads_bytes_opt_(PropertyBufferSize) CONST PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiSetDeviceProperty SetupDiSetDevicePropertyW +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfacePropertyKeys( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Out_writes_opt_(PropertyKeyCount) DEVPROPKEY *PropertyKeyArray, + _In_ DWORD PropertyKeyCount, + _Out_opt_ PDWORD RequiredPropertyKeyCount, + _In_ DWORD Flags + ); + +_Success_(return != FALSE) +_When_(*PropertyType == DEVPROP_TYPE_STRING, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_INDIRECT, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_LIST, _At_((PZZWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfacePropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _In_ CONST DEVPROPKEY *PropertyKey, + _Out_ DEVPROPTYPE *PropertyType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiGetDeviceInterfaceProperty SetupDiGetDeviceInterfacePropertyW +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceInterfacePropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _In_ CONST DEVPROPKEY *PropertyKey, + _In_ DEVPROPTYPE PropertyType, + _In_reads_bytes_opt_(PropertyBufferSize) CONST PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiSetDeviceInterfaceProperty SetupDiSetDeviceInterfacePropertyW +#endif + +// +// Flags for SetupDiGetClassPropertyKeys, SetupDiGetClassProperty, and +// SetupDiSetClassProperty. +// +#define DICLASSPROP_INSTALLER 0x00000001 // device setup class property +#define DICLASSPROP_INTERFACE 0x00000002 // device interface class property + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassPropertyKeys( + _In_ CONST GUID *ClassGuid, + _Out_writes_opt_(PropertyKeyCount) DEVPROPKEY *PropertyKeyArray, + _In_ DWORD PropertyKeyCount, + _Out_opt_ PDWORD RequiredPropertyKeyCount, + _In_ DWORD Flags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassPropertyKeysExW( + _In_ CONST GUID *ClassGuid, + _Out_writes_opt_(PropertyKeyCount) DEVPROPKEY *PropertyKeyArray, + _In_ DWORD PropertyKeyCount, + _Out_opt_ PDWORD RequiredPropertyKeyCount, + _In_ DWORD Flags, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetClassPropertyKeysEx SetupDiGetClassPropertyKeysExW +#endif + +_Success_(return != FALSE) +_When_(*PropertyType == DEVPROP_TYPE_STRING, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_INDIRECT, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_LIST, _At_((PZZWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassPropertyW( + _In_ CONST GUID *ClassGuid, + _In_ CONST DEVPROPKEY *PropertyKey, + _Out_ DEVPROPTYPE *PropertyType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiGetClassProperty SetupDiGetClassPropertyW +#endif + +_Success_(return != FALSE) +_When_(*PropertyType == DEVPROP_TYPE_STRING, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_INDIRECT, _At_((PWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +_When_(*PropertyType == DEVPROP_TYPE_STRING_LIST, _At_((PZZWSTR) PropertyBuffer, _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize))) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassPropertyExW( + _In_ CONST GUID *ClassGuid, + _In_ CONST DEVPROPKEY *PropertyKey, + _Out_ DEVPROPTYPE *PropertyType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_ DWORD Flags, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetClassPropertyEx SetupDiGetClassPropertyExW +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassPropertyW( + _In_ CONST GUID *ClassGuid, + _In_ CONST DEVPROPKEY *PropertyKey, + _In_ DEVPROPTYPE PropertyType, + _In_reads_bytes_opt_(PropertyBufferSize) CONST PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupDiSetClassProperty SetupDiSetClassPropertyW +#endif + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassPropertyExW( + _In_ CONST GUID *ClassGuid, + _In_ CONST DEVPROPKEY *PropertyKey, + _In_ DEVPROPTYPE PropertyType, + _In_reads_bytes_opt_(PropertyBufferSize) CONST PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_ DWORD Flags, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiSetClassPropertyEx SetupDiSetClassPropertyExW +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +// +// Device registry property codes +// (Codes marked as read-only (R) may only be used for +// SetupDiGetDeviceRegistryProperty) +// +// These values should cover the same set of registry properties +// as defined by the CM_DRP codes in cfgmgr32.h. +// +// Note that SPDRP codes are zero based while CM_DRP codes are one based! +// +#define SPDRP_DEVICEDESC (0x00000000) // DeviceDesc (R/W) +#define SPDRP_HARDWAREID (0x00000001) // HardwareID (R/W) +#define SPDRP_COMPATIBLEIDS (0x00000002) // CompatibleIDs (R/W) +#define SPDRP_UNUSED0 (0x00000003) // unused +#define SPDRP_SERVICE (0x00000004) // Service (R/W) +#define SPDRP_UNUSED1 (0x00000005) // unused +#define SPDRP_UNUSED2 (0x00000006) // unused +#define SPDRP_CLASS (0x00000007) // Class (R--tied to ClassGUID) +#define SPDRP_CLASSGUID (0x00000008) // ClassGUID (R/W) +#define SPDRP_DRIVER (0x00000009) // Driver (R/W) +#define SPDRP_CONFIGFLAGS (0x0000000A) // ConfigFlags (R/W) +#define SPDRP_MFG (0x0000000B) // Mfg (R/W) +#define SPDRP_FRIENDLYNAME (0x0000000C) // FriendlyName (R/W) +#define SPDRP_LOCATION_INFORMATION (0x0000000D) // LocationInformation (R/W) +#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME (0x0000000E) // PhysicalDeviceObjectName (R) +#define SPDRP_CAPABILITIES (0x0000000F) // Capabilities (R) +#define SPDRP_UI_NUMBER (0x00000010) // UiNumber (R) +#define SPDRP_UPPERFILTERS (0x00000011) // UpperFilters (R/W) +#define SPDRP_LOWERFILTERS (0x00000012) // LowerFilters (R/W) +#define SPDRP_BUSTYPEGUID (0x00000013) // BusTypeGUID (R) +#define SPDRP_LEGACYBUSTYPE (0x00000014) // LegacyBusType (R) +#define SPDRP_BUSNUMBER (0x00000015) // BusNumber (R) +#define SPDRP_ENUMERATOR_NAME (0x00000016) // Enumerator Name (R) +#define SPDRP_SECURITY (0x00000017) // Security (R/W, binary form) +#define SPDRP_SECURITY_SDS (0x00000018) // Security (W, SDS form) +#define SPDRP_DEVTYPE (0x00000019) // Device Type (R/W) +#define SPDRP_EXCLUSIVE (0x0000001A) // Device is exclusive-access (R/W) +#define SPDRP_CHARACTERISTICS (0x0000001B) // Device Characteristics (R/W) +#define SPDRP_ADDRESS (0x0000001C) // Device Address (R) +#define SPDRP_UI_NUMBER_DESC_FORMAT (0X0000001D) // UiNumberDescFormat (R/W) +#define SPDRP_DEVICE_POWER_DATA (0x0000001E) // Device Power Data (R) +#define SPDRP_REMOVAL_POLICY (0x0000001F) // Removal Policy (R) +#define SPDRP_REMOVAL_POLICY_HW_DEFAULT (0x00000020) // Hardware Removal Policy (R) +#define SPDRP_REMOVAL_POLICY_OVERRIDE (0x00000021) // Removal Policy Override (RW) +#define SPDRP_INSTALL_STATE (0x00000022) // Device Install State (R) +#define SPDRP_LOCATION_PATHS (0x00000023) // Device Location Paths (R) +#define SPDRP_BASE_CONTAINERID (0x00000024) // Base ContainerID (R) + +#define SPDRP_MAXIMUM_PROPERTY (0x00000025) // Upper bound on ordinals + +// +// Class registry property codes +// (Codes marked as read-only (R) may only be used for +// SetupDiGetClassRegistryProperty) +// +// These values should cover the same set of registry properties +// as defined by the CM_CRP codes in cfgmgr32.h. +// they should also have a 1:1 correspondence with Device registers, where applicable +// but no overlap otherwise +// +#define SPCRP_UPPERFILTERS (0x00000011) // UpperFilters (R/W) +#define SPCRP_LOWERFILTERS (0x00000012) // LowerFilters (R/W) +#define SPCRP_SECURITY (0x00000017) // Security (R/W, binary form) +#define SPCRP_SECURITY_SDS (0x00000018) // Security (W, SDS form) +#define SPCRP_DEVTYPE (0x00000019) // Device Type (R/W) +#define SPCRP_EXCLUSIVE (0x0000001A) // Device is exclusive-access (R/W) +#define SPCRP_CHARACTERISTICS (0x0000001B) // Device Characteristics (R/W) +#define SPCRP_MAXIMUM_PROPERTY (0x0000001C) // Upper bound on ordinals + +_Success_(return != FALSE) +_When_((*PropertyRegDataType == REG_SZ), _At_((PSTR) PropertyBuffer, _Post_valid_)) +_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZSTR) PropertyBuffer, _Post_valid_)) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceRegistryPropertyA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +_Success_(return != FALSE) +_When_((*PropertyRegDataType == REG_SZ), _At_((PWSTR) PropertyBuffer, _Post_valid_)) +_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZWSTR) PropertyBuffer, _Post_valid_)) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceRegistryPropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW +#else +#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassRegistryPropertyA( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassRegistryPropertyW( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyW +#else +#define SetupDiGetClassRegistryProperty SetupDiGetClassRegistryPropertyA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceRegistryPropertyA( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceRegistryPropertyW( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize + ); + +#ifdef UNICODE +#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW +#else +#define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassRegistryPropertyA( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassRegistryPropertyW( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyW +#else +#define SetupDiSetClassRegistryProperty SetupDiSetClassRegistryPropertyA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_ PSP_DEVINSTALL_PARAMS_A DeviceInstallParams + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_ PSP_DEVINSTALL_PARAMS_W DeviceInstallParams + ); + +#ifdef UNICODE +#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW +#else +#define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA +#endif + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_bytes_to_opt_(ClassInstallParamsSize, *RequiredSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize, + _Out_opt_ PDWORD RequiredSize + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_bytes_to_opt_(ClassInstallParamsSize, *RequiredSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW +#else +#define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DEVINSTALL_PARAMS_A DeviceInstallParams + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DEVINSTALL_PARAMS_W DeviceInstallParams + ); + +#ifdef UNICODE +#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW +#else +#define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_reads_bytes_opt_(ClassInstallParamsSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_reads_bytes_opt_(ClassInstallParamsSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize + ); + +#ifdef UNICODE +#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW +#else +#define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDriverInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_A DriverInfoData, + _Out_ PSP_DRVINSTALL_PARAMS DriverInstallParams + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDriverInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_W DriverInfoData, + _Out_ PSP_DRVINSTALL_PARAMS DriverInstallParams + ); + +#ifdef UNICODE +#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW +#else +#define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDriverInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_A DriverInfoData, + _In_ PSP_DRVINSTALL_PARAMS DriverInstallParams + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDriverInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_W DriverInfoData, + _In_ PSP_DRVINSTALL_PARAMS DriverInstallParams + ); + +#ifdef UNICODE +#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW +#else +#define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiLoadClassIcon( + _In_ CONST GUID *ClassGuid, + _Out_opt_ HICON *LargeIcon, + _Out_opt_ PINT MiniIconIndex + ); + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +WINSETUPAPI +BOOL +WINAPI +SetupDiLoadDeviceIcon( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ UINT cxIcon, + _In_ UINT cyIcon, + _In_ DWORD Flags, + _Out_ HICON *hIcon + ); + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + + +// +// Flags controlling the drawing of mini-icons +// +#define DMI_MASK 0x00000001 +#define DMI_BKCOLOR 0x00000002 +#define DMI_USERECT 0x00000004 + +WINSETUPAPI +INT +WINAPI +SetupDiDrawMiniIcon( + _In_ HDC hdc, + _In_ RECT rc, + _In_ INT MiniIconIndex, + _In_ DWORD Flags + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassBitmapIndex( + _In_opt_ CONST GUID *ClassGuid, + _Out_ PINT MiniIconIndex + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassImageList( + _Out_ PSP_CLASSIMAGELIST_DATA ClassImageListData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassImageListExA( + _Out_ PSP_CLASSIMAGELIST_DATA ClassImageListData, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassImageListExW( + _Out_ PSP_CLASSIMAGELIST_DATA ClassImageListData, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetClassImageListEx SetupDiGetClassImageListExW +#else +#define SetupDiGetClassImageListEx SetupDiGetClassImageListExA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassImageIndex( + _In_ PSP_CLASSIMAGELIST_DATA ClassImageListData, + _In_ CONST GUID *ClassGuid, + _Out_ PINT ImageIndex + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiDestroyClassImageList( + _In_ PSP_CLASSIMAGELIST_DATA ClassImageListData + ); + + +// +// PropertySheetType values for the SetupDiGetClassDevPropertySheets API +// +#define DIGCDP_FLAG_BASIC 0x00000001 +#define DIGCDP_FLAG_ADVANCED 0x00000002 + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#define DIGCDP_FLAG_REMOTE_BASIC 0x00000003 // not presently implemented +#define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004 + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDevPropertySheetsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ LPPROPSHEETHEADERA PropertySheetHeader, + _In_ DWORD PropertySheetHeaderPageListSize, + _Out_opt_ PDWORD RequiredSize, + _In_ DWORD PropertySheetType + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDevPropertySheetsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ LPPROPSHEETHEADERW PropertySheetHeader, + _In_ DWORD PropertySheetHeaderPageListSize, + _Out_opt_ PDWORD RequiredSize, + _In_ DWORD PropertySheetType + ); + +#ifdef UNICODE +#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW +#else +#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA +#endif + + +// +// Define ICON IDs publicly exposed from setupapi. +// +#define IDI_RESOURCEFIRST 159 +#define IDI_RESOURCE 159 +#define IDI_RESOURCELAST 161 +#define IDI_RESOURCEOVERLAYFIRST 161 +#define IDI_RESOURCEOVERLAYLAST 161 +#define IDI_CONFLICT 161 + +#define IDI_CLASSICON_OVERLAYFIRST 500 +#define IDI_CLASSICON_OVERLAYLAST 502 +#define IDI_PROBLEM_OVL 500 +#define IDI_DISABLED_OVL 501 +#define IDI_FORCED_OVL 502 + + +WINSETUPAPI +BOOL +WINAPI +SetupDiAskForOEMDisk( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiSelectOEMDrv( + _In_opt_ HWND hwndParent, + _In_ HDEVINFO DeviceInfoSet, + _Inout_opt_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PWSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW +#else +#define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidExA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidExW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PWSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExW +#else +#define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExA +#endif + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameA( + _In_ PCSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameW( + _In_ PCWSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW +#else +#define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA +#endif + + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameExA( + _In_ PCSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameExW( + _In_ PCWSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExW +#else +#define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameA( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameW( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PWSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW +#else +#define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA +#endif + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameExA( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameExW( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PWSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExW +#else +#define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExA +#endif + + +// +// PageType values for SetupDiGetWizardPage API +// +#define SPWPT_SELECTDEVICE 0x00000001 + +// +// Flags for SetupDiGetWizardPage API +// +#define SPWP_USE_DEVINFO_DATA 0x00000001 + +WINSETUPAPI +HPROPSHEETPAGE +WINAPI +SetupDiGetWizardPage( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_INSTALLWIZARD_DATA InstallWizardData, + _In_ DWORD PageType, + _In_ DWORD Flags + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetSelectedDevice( + _In_ HDEVINFO DeviceInfoSet, + _Out_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetSelectedDevice( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData + ); + + +#if _SETUPAPI_VER >= _WIN32_WINNT_WS03 + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualModelsSectionA( + _In_ PINFCONTEXT Context, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualModelsSectionW( + _In_ PINFCONTEXT Context, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetActualModelsSection SetupDiGetActualModelsSectionW +#else +#define SetupDiGetActualModelsSection SetupDiGetActualModelsSectionA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WS03 + + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallA( + _In_ HINF InfHandle, + _In_ PCSTR InfSectionName, + _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PSTR *Extension + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallW( + _In_ HINF InfHandle, + _In_ PCWSTR InfSectionName, + _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PWSTR *Extension + ); + +#ifdef UNICODE +#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW +#else +#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA +#endif + + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallExA( + _In_ HINF InfHandle, + _In_ PCSTR InfSectionName, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PSTR *Extension, + _Reserved_ PVOID Reserved + ); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallExW( + _In_ HINF InfHandle, + _In_ PCWSTR InfSectionName, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PWSTR *Extension, + _Reserved_ PVOID Reserved + ); + +#ifdef UNICODE +#define SetupDiGetActualSectionToInstallEx SetupDiGetActualSectionToInstallExW +#else +#define SetupDiGetActualSectionToInstallEx SetupDiGetActualSectionToInstallExA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// SetupEnumInfSections is for low-level parsing of an INF +// +WINSETUPAPI +BOOL +WINAPI +SetupEnumInfSectionsA ( + _In_ HINF InfHandle, + _In_ UINT Index, + _Out_writes_opt_(Size) PSTR Buffer, + _In_ UINT Size, + _Out_opt_ UINT *SizeNeeded + ); + +WINSETUPAPI +BOOL +WINAPI +SetupEnumInfSectionsW ( + _In_ HINF InfHandle, + _In_ UINT Index, + _Out_writes_opt_(Size) PWSTR Buffer, + _In_ UINT Size, + _Out_opt_ UINT *SizeNeeded + ); + +#ifdef UNICODE +#define SetupEnumInfSections SetupEnumInfSectionsW +#else +#define SetupEnumInfSections SetupEnumInfSectionsA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +typedef struct _SP_INF_SIGNER_INFO_V1_A { + DWORD cbSize; + CHAR CatalogFile[MAX_PATH]; + CHAR DigitalSigner[MAX_PATH]; + CHAR DigitalSignerVersion[MAX_PATH]; +} SP_INF_SIGNER_INFO_V1_A, *PSP_INF_SIGNER_INFO_V1_A; + +typedef struct _SP_INF_SIGNER_INFO_V1_W { + DWORD cbSize; + WCHAR CatalogFile[MAX_PATH]; + WCHAR DigitalSigner[MAX_PATH]; + WCHAR DigitalSignerVersion[MAX_PATH]; +} SP_INF_SIGNER_INFO_V1_W, *PSP_INF_SIGNER_INFO_V1_W; + +#ifdef UNICODE +typedef SP_INF_SIGNER_INFO_V1_W SP_INF_SIGNER_INFO_V1; +typedef PSP_INF_SIGNER_INFO_V1_W PSP_INF_SIGNER_INFO_V1; +#else +typedef SP_INF_SIGNER_INFO_V1_A SP_INF_SIGNER_INFO_V1; +typedef PSP_INF_SIGNER_INFO_V1_A PSP_INF_SIGNER_INFO_V1; +#endif + +#if _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +typedef struct _SP_INF_SIGNER_INFO_V2_A { + DWORD cbSize; + CHAR CatalogFile[MAX_PATH]; + CHAR DigitalSigner[MAX_PATH]; + CHAR DigitalSignerVersion[MAX_PATH]; + DWORD SignerScore; +} SP_INF_SIGNER_INFO_V2_A, *PSP_INF_SIGNER_INFO_V2_A; + +typedef struct _SP_INF_SIGNER_INFO_V2_W { + DWORD cbSize; + WCHAR CatalogFile[MAX_PATH]; + WCHAR DigitalSigner[MAX_PATH]; + WCHAR DigitalSignerVersion[MAX_PATH]; + DWORD SignerScore; +} SP_INF_SIGNER_INFO_V2_W, *PSP_INF_SIGNER_INFO_V2_W; + +#ifdef UNICODE +typedef SP_INF_SIGNER_INFO_V2_W SP_INF_SIGNER_INFO_V2; +typedef PSP_INF_SIGNER_INFO_V2_W PSP_INF_SIGNER_INFO_V2; +#else +typedef SP_INF_SIGNER_INFO_V2_A SP_INF_SIGNER_INFO_V2; +typedef PSP_INF_SIGNER_INFO_V2_A PSP_INF_SIGNER_INFO_V2; +#endif + +// +// Driver signer scores (high order bit of the signing byte means unsigned) +// +#define SIGNERSCORE_UNKNOWN 0xFF000000 +#define SIGNERSCORE_W9X_SUSPECT 0xC0000000 +#define SIGNERSCORE_UNSIGNED 0x80000000 +#define SIGNERSCORE_AUTHENTICODE 0x0F000000 +#define SIGNERSCORE_WHQL 0x0D000005 // base WHQL. +#define SIGNERSCORE_UNCLASSIFIED 0x0D000004 // UNCLASSIFIED == INBOX == STANDARD == PREMIUM when the SIGNERSCORE_MASK +#define SIGNERSCORE_INBOX 0x0D000003 // filter is applied. +#define SIGNERSCORE_LOGO_STANDARD 0x0D000002 +#define SIGNERSCORE_LOGO_PREMIUM 0x0D000001 + +#define SIGNERSCORE_MASK 0xFF000000 // Mask out all but the upper BYTE which contains the ranking signer information +#define SIGNERSCORE_SIGNED_MASK 0xF0000000 // Mask out only the upper nibble, which tells us if the package is signed or not. + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_LONGHORN + +#if USE_SP_INF_SIGNER_INFO_V1 || (_SETUPAPI_VER < _WIN32_WINNT_LONGHORN) // use version 1 signer info structure + +typedef SP_INF_SIGNER_INFO_V1_A SP_INF_SIGNER_INFO_A; +typedef PSP_INF_SIGNER_INFO_V1_A PSP_INF_SIGNER_INFO_A; +typedef SP_INF_SIGNER_INFO_V1_W SP_INF_SIGNER_INFO_W; +typedef PSP_INF_SIGNER_INFO_V1_W PSP_INF_SIGNER_INFO_W; +typedef SP_INF_SIGNER_INFO_V1 SP_INF_SIGNER_INFO; +typedef PSP_INF_SIGNER_INFO_V1 PSP_INF_SIGNER_INFO; + +#else // use version 2 signer info structure + +typedef SP_INF_SIGNER_INFO_V2_A SP_INF_SIGNER_INFO_A; +typedef PSP_INF_SIGNER_INFO_V2_A PSP_INF_SIGNER_INFO_A; +typedef SP_INF_SIGNER_INFO_V2_W SP_INF_SIGNER_INFO_W; +typedef PSP_INF_SIGNER_INFO_V2_W PSP_INF_SIGNER_INFO_W; +typedef SP_INF_SIGNER_INFO_V2 SP_INF_SIGNER_INFO; +typedef PSP_INF_SIGNER_INFO_V2 PSP_INF_SIGNER_INFO; + +#endif // use current version of signer info structure + + +WINSETUPAPI +BOOL +WINAPI +SetupVerifyInfFileA( + _In_ PCSTR InfName, + _In_opt_ PSP_ALTPLATFORM_INFO AltPlatformInfo, + _Inout_ PSP_INF_SIGNER_INFO_A InfSignerInfo + ); + +WINSETUPAPI +BOOL +WINAPI +SetupVerifyInfFileW( + _In_ PCWSTR InfName, + _In_opt_ PSP_ALTPLATFORM_INFO AltPlatformInfo, + _Inout_ PSP_INF_SIGNER_INFO_W InfSignerInfo + ); + +#ifdef UNICODE +#define SetupVerifyInfFile SetupVerifyInfFileW +#else +#define SetupVerifyInfFile SetupVerifyInfFileA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +#if _SETUPAPI_VER >= _WIN32_WINNT_WINXP + +// +// Flags for use by SetupDiGetCustomDeviceProperty +// +#define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001 + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetCustomDevicePropertyA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PCSTR CustomPropertyName, + _In_ DWORD Flags, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetCustomDevicePropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PCWSTR CustomPropertyName, + _In_ DWORD Flags, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize + ); + +#ifdef UNICODE +#define SetupDiGetCustomDeviceProperty SetupDiGetCustomDevicePropertyW +#else +#define SetupDiGetCustomDeviceProperty SetupDiGetCustomDevicePropertyA +#endif + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WINXP + + +#if _SETUPAPI_VER >= _WIN32_WINNT_WS03 + +// +// To configure WMI security for downlevel platforms where the [DDInstall.WMI] +// section isn't natively supported by setupapi, a redistributable co-installer +// is supplied in the DDK for use on those platforms. +// + +// +// Flags for use by SetupConfigureWmiFromInfSection +// +#define SCWMI_CLOBBER_SECURITY 0x00000001 + +WINSETUPAPI +BOOL +WINAPI +SetupConfigureWmiFromInfSectionA( + _In_ HINF InfHandle, + _In_ PCSTR SectionName, + _In_ DWORD Flags + ); + +WINSETUPAPI +BOOL +WINAPI +SetupConfigureWmiFromInfSectionW( + _In_ HINF InfHandle, + _In_ PCWSTR SectionName, + _In_ DWORD Flags + ); + +#ifdef UNICODE +#define SetupConfigureWmiFromInfSection SetupConfigureWmiFromInfSectionW +#else +#define SetupConfigureWmiFromInfSection SetupConfigureWmiFromInfSectionA +#endif + + +#endif // _SETUPAPI_VER >= _WIN32_WINNT_WS03 + + + +#ifdef __cplusplus +} +#endif + +#include + +#if defined (_MSC_VER) && (_MSC_VER >= 1200) +#pragma warning(pop) +#endif + + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ +#pragma endregion + +#endif // _INC_SETUPAPI