diff --git a/Build/INSTALL.md b/Build/INSTALL.md index 37088895ce..57d9b319be 100644 --- a/Build/INSTALL.md +++ b/Build/INSTALL.md @@ -9,7 +9,7 @@ Then, follow the guide based on your operating system. Windows === -Using Visual Studio, simply build and it will place the .exe file in the correct directory. +Using Visual Studio, simply build and it will place the .exe file in the correct directory. You will need Visual Studio, MSVC, C++ ATL, C++ MFC, and the Windows SDK; all of which can be installed with Visual Studio Installer. macOS === @@ -17,8 +17,7 @@ Using Xcode, simply build in Xcode and it will place the .app file in the correc Linux === -Using the command line, simply type make and it will place stepmania in the root ITGmania -directory. There is no more need to symlink the files. +From the `itgmania` directory (not `src`), run `cmake -B build` followed by `sudo make install`. The `itgmania` executable will be in the same directory you are in, so you can type `./itgmania` to run the game. Installing ITGmania == diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6af301721c..87ae5e3571 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -357,7 +357,7 @@ if(WIN32) sm_add_link_flag("${SM_EXE_NAME}" "/LIBPATH:\"${SM_EXTERN_DIR}/ffmpeg-w32/${SM_WIN32_ARCH}\"") sm_add_link_flag("${SM_EXE_NAME}" - "/LIBPATH:\"${SM_SRC_DIR}/archutils/Win32/ddk/${SM_WIN32_ARCH}\"") + "/LIBPATH:\"$(WindowsSdkDir)Lib\\um\\${SM_WIN32_ARCH}\"") sm_add_link_flag("${SM_EXE_NAME}" "/ERRORREPORT:SEND") sm_add_link_flag("${SM_EXE_NAME}" "/MAPINFO:EXPORTS") sm_add_link_flag("${SM_EXE_NAME}" "/SAFESEH:NO") diff --git a/src/arch/InputHandler/InputHandler_Win32_Para.cpp b/src/arch/InputHandler/InputHandler_Win32_Para.cpp index fd0b189f46..acbafe3036 100644 --- a/src/arch/InputHandler/InputHandler_Win32_Para.cpp +++ b/src/arch/InputHandler/InputHandler_Win32_Para.cpp @@ -8,9 +8,9 @@ // TODO: Abstract this windows-specific stuff into USBDevice. extern "C" { -#include "archutils/Win32/ddk/setupapi.h" +#include "setupapi.h" /* Quiet header warning: */ -#include "archutils/Win32/ddk/hidsdi.h" +#include "hidsdi.h" } #include diff --git a/src/archutils/Win32/CrashHandlerChild.cpp b/src/archutils/Win32/CrashHandlerChild.cpp index b483c61822..c28a3cdada 100644 --- a/src/archutils/Win32/CrashHandlerChild.cpp +++ b/src/archutils/Win32/CrashHandlerChild.cpp @@ -26,7 +26,7 @@ #include #include -#include "archutils/Win32/ddk/dbghelp.h" +#include "dbghelp.h" #include #if defined(HAVE_FCNTL_H) #include diff --git a/src/archutils/Win32/USB.cpp b/src/archutils/Win32/USB.cpp index 9f4b407fc0..96651a59e0 100644 --- a/src/archutils/Win32/USB.cpp +++ b/src/archutils/Win32/USB.cpp @@ -8,9 +8,9 @@ #pragma comment(lib, "hid.lib") extern "C" { -#include "archutils/Win32/ddk/setupapi.h" +#include "setupapi.h" /* Quiet header warning: */ -#include "archutils/Win32/ddk/hidsdi.h" +#include "hidsdi.h" } #include diff --git a/src/archutils/Win32/ddk/dbghelp.h b/src/archutils/Win32/ddk/dbghelp.h deleted file mode 100644 index 91c82cb39a..0000000000 --- a/src/archutils/Win32/ddk/dbghelp.h +++ /dev/null @@ -1,4185 +0,0 @@ -/*++ 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/hidpi.h b/src/archutils/Win32/ddk/hidpi.h deleted file mode 100644 index 822d7427ad..0000000000 --- a/src/archutils/Win32/ddk/hidpi.h +++ /dev/null @@ -1,1843 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - - HIDPI.H - -Abstract: - - Public Interface to the HID parsing library. - -Environment: - - Kernel & user mode - ---*/ - -#ifndef __HIDPI_H__ -#define __HIDPI_H__ -#include - -#pragma region Desktop Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - -#ifdef __cplusplus -extern "C" { -#endif - -#if _MSC_VER >= 1200 -#pragma warning(push) -#endif -#pragma warning(disable:4115) // named type definition in parentheses -#pragma warning(disable:4201) // nameless struct/union -#pragma warning(disable:4214) // bit field types other than int - -#include - -// Please include "hidsdi.h" to use the user space (dll / parser) -// Please include "hidpddi.h" to use the kernel space parser - -// -// Special Link collection values for using the query functions -// -// Root collection references the collection at the base of the link -// collection tree. -// Unspecifies, references all collections in the link collection tree. -// -#define HIDP_LINK_COLLECTION_ROOT ((USHORT) -1) -#define HIDP_LINK_COLLECTION_UNSPECIFIED ((USHORT) 0) - - -typedef enum _HIDP_REPORT_TYPE -{ - HidP_Input, - HidP_Output, - HidP_Feature -} HIDP_REPORT_TYPE; - -typedef struct _USAGE_AND_PAGE -{ - USAGE Usage; - USAGE UsagePage; -} USAGE_AND_PAGE, *PUSAGE_AND_PAGE; - -#define HidP_IsSameUsageAndPage(u1, u2) ((* (PULONG) &u1) == (* (PULONG) &u2)) - -typedef struct _HIDP_BUTTON_CAPS -{ - USAGE UsagePage; - UCHAR ReportID; - BOOLEAN IsAlias; - - USHORT BitField; - USHORT LinkCollection; // A unique internal index pointer - - USAGE LinkUsage; - USAGE LinkUsagePage; - - BOOLEAN IsRange; - BOOLEAN IsStringRange; - BOOLEAN IsDesignatorRange; - BOOLEAN IsAbsolute; - - ULONG Reserved[10]; - union { - struct { - USAGE UsageMin, UsageMax; - USHORT StringMin, StringMax; - USHORT DesignatorMin, DesignatorMax; - USHORT DataIndexMin, DataIndexMax; - } Range; - struct { - USAGE Usage, Reserved1; - USHORT StringIndex, Reserved2; - USHORT DesignatorIndex, Reserved3; - USHORT DataIndex, Reserved4; - } NotRange; - }; - -} HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS; - - -typedef struct _HIDP_VALUE_CAPS -{ - USAGE UsagePage; - UCHAR ReportID; - BOOLEAN IsAlias; - - USHORT BitField; - USHORT LinkCollection; // A unique internal index pointer - - USAGE LinkUsage; - USAGE LinkUsagePage; - - BOOLEAN IsRange; - BOOLEAN IsStringRange; - BOOLEAN IsDesignatorRange; - BOOLEAN IsAbsolute; - - BOOLEAN HasNull; // Does this channel have a null report union - UCHAR Reserved; - USHORT BitSize; // How many bits are devoted to this value? - - USHORT ReportCount; // See Note below. Usually set to 1. - USHORT Reserved2[5]; - - ULONG UnitsExp; - ULONG Units; - - LONG LogicalMin, LogicalMax; - LONG PhysicalMin, PhysicalMax; - - union { - struct { - USAGE UsageMin, UsageMax; - USHORT StringMin, StringMax; - USHORT DesignatorMin, DesignatorMax; - USHORT DataIndexMin, DataIndexMax; - } Range; - - struct { - USAGE Usage, Reserved1; - USHORT StringIndex, Reserved2; - USHORT DesignatorIndex, Reserved3; - USHORT DataIndex, Reserved4; - } NotRange; - }; -} HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS; - -// -// Notes: -// -// ReportCount: When a report descriptor declares an Input, Output, or -// Feature main item with fewer usage declarations than the report count, then -// the last usage applies to all remaining unspecified count in that main item. -// (As an example you might have data that required many fields to describe, -// possibly buffered bytes.) In this case, only one value cap structure is -// allocated for these associtated fields, all with the same usage, and Report -// Count reflects the number of fields involved. Normally ReportCount is 1. -// To access all of the fields in such a value structure would require using -// HidP_GetUsageValueArray and HidP_SetUsageValueArray. HidP_GetUsageValue/ -// HidP_SetScaledUsageValue will also work, however, these functions will only -// work with the first field of the structure. -// - -// -// The link collection tree consists of an array of LINK_COLLECTION_NODES -// where the index into this array is the same as the collection number. -// -// Given a collection A which contains a subcollection B, A is defined to be -// the parent B, and B is defined to be the child. -// -// Given collections A, B, and C where B and C are children of A, and B was -// encountered before C in the report descriptor, B is defined as a sibling of -// C. (This implies, of course, that if B is a sibling of C, then C is NOT a -// sibling of B). -// -// B is defined as the NextSibling of C if and only if there exists NO -// child collection of A, call it D, such that B is a sibling of D and D -// is a sibling of C. -// -// E is defined to be the FirstChild of A if and only if for all children of A, -// F, that are not equivalent to E, F is a sibling of E. -// (This implies, of course, that the does not exist a child of A, call it G, -// where E is a sibling of G). In other words the first sibling is the last -// link collection found in the list. -// -// In other words, if a collection B is defined within the definition of another -// collection A, B becomes a child of A. All collections with the same parent -// are considered siblings. The FirstChild of the parent collection, A, will be -// last collection defined that has A as a parent. The order of sibling pointers -// is similarly determined. When a collection B is defined, it becomes the -// FirstChild of it's parent collection. The previously defined FirstChild of the -// parent collection becomes the NextSibling of the new collection. As new -// collections with the same parent are discovered, the chain of sibling is built. -// -// With that in mind, the following describes conclusively a data structure -// that provides direct traversal up, down, and accross the link collection -// tree. -// -// -typedef struct _HIDP_LINK_COLLECTION_NODE -{ - USAGE LinkUsage; - USAGE LinkUsagePage; - USHORT Parent; - USHORT NumberOfChildren; - USHORT NextSibling; - USHORT FirstChild; - ULONG CollectionType: 8; // As defined in 6.2.2.6 of HID spec - ULONG IsAlias : 1; // This link node is an allias of the next link node. - ULONG Reserved: 23; - PVOID UserContext; // The user can hang his coat here. -} HIDP_LINK_COLLECTION_NODE, *PHIDP_LINK_COLLECTION_NODE; - -// -// When a link collection is described by a delimiter, alias link collection -// nodes are created. (One for each usage within the delimiter). -// The parser assigns each capability description listed above only one -// link collection. -// -// If a control is defined within a collection defined by -// delimited usages, then that control is said to be within multiple link -// collections, one for each usage within the open and close delimiter tokens. -// Such multiple link collecions are said to be aliases. The first N-1 such -// collections, listed in the link collection node array, have their IsAlias -// bit set. The last such link collection is the link collection index used -// in the capabilities described above. -// Clients wishing to set a control in an aliased collection, should walk the -// collection array once for each time they see the IsAlias flag set, and use -// the last link collection as the index for the below accessor functions. -// -// NB: if IsAlias is set, then NextSibling should be one more than the current -// link collection node index. -// - -typedef PUCHAR PHIDP_REPORT_DESCRIPTOR; -typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA; - -typedef struct _HIDP_CAPS -{ - USAGE Usage; - USAGE UsagePage; - USHORT InputReportByteLength; - USHORT OutputReportByteLength; - USHORT FeatureReportByteLength; - USHORT Reserved[17]; - - USHORT NumberLinkCollectionNodes; - - USHORT NumberInputButtonCaps; - USHORT NumberInputValueCaps; - USHORT NumberInputDataIndices; - - USHORT NumberOutputButtonCaps; - USHORT NumberOutputValueCaps; - USHORT NumberOutputDataIndices; - - USHORT NumberFeatureButtonCaps; - USHORT NumberFeatureValueCaps; - USHORT NumberFeatureDataIndices; -} HIDP_CAPS, *PHIDP_CAPS; - -typedef struct _HIDP_DATA -{ - USHORT DataIndex; - USHORT Reserved; - union { - ULONG RawValue; // for values - BOOLEAN On; // for buttons MUST BE TRUE for buttons. - }; -} HIDP_DATA, *PHIDP_DATA; -// -// The HIDP_DATA structure is used with HidP_GetData and HidP_SetData -// functions. -// -// The parser contiguously assigns every control (button or value) in a hid -// device a unique data index from zero to NumberXXXDataIndices -1 , inclusive. -// This value is found in the HIDP_BUTTON_CAPS and HIDP_VALUE_CAPS structures. -// -// Most clients will find the Get/Set Buttons / Value accessor functions -// sufficient to their needs, as they will allow the clients to access the -// data known to them while ignoring the other controls. -// -// More complex clients, which actually read the Button / Value Caps, and which -// do a value add service to these routines (EG Direct Input), will need to -// access all the data in the device without interest in the individual usage -// or link collection location. These are the clients that will find -// HidP_Data useful. -// - -typedef struct _HIDP_UNKNOWN_TOKEN -{ - UCHAR Token; - UCHAR Reserved[3]; - ULONG BitField; -} HIDP_UNKNOWN_TOKEN, *PHIDP_UNKNOWN_TOKEN; - -typedef struct _HIDP_EXTENDED_ATTRIBUTES -{ - UCHAR NumGlobalUnknowns; - UCHAR Reserved [3]; - PHIDP_UNKNOWN_TOKEN GlobalUnknowns; - // ... Additional attributes - ULONG Data [1]; // variableLength DO NOT ACCESS THIS FIELD -} HIDP_EXTENDED_ATTRIBUTES, *PHIDP_EXTENDED_ATTRIBUTES; - -_Must_inspect_result_ -_IRQL_requires_max_(PASSIVE_LEVEL) -NTSTATUS __stdcall -HidP_GetCaps ( - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Out_ PHIDP_CAPS Capabilities - ); -/*++ -Routine Description: - Returns a list of capabilities of a given hid device as described by its - preparsed data. - -Arguments: - PreparsedData The preparsed data returned from HIDCLASS. - Capabilities a HIDP_CAPS structure - -Return Value: - HIDP_STATUS_SUCCESS - HIDP_STATUS_INVALID_PREPARSED_DATA ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_GetLinkCollectionNodes ( - _Out_writes_to_(*LinkCollectionNodesLength, *LinkCollectionNodesLength) PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes, - _Inout_ PULONG LinkCollectionNodesLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData - ); -/*++ -Routine Description: - Return a list of PHIDP_LINK_COLLECTION_NODEs used to describe the link - collection tree of this hid device. See the above description of - struct _HIDP_LINK_COLLECTION_NODE. - -Arguments: - LinkCollectionNodes - a caller allocated array into which - HidP_GetLinkCollectionNodes will store the information - - LinKCollectionNodesLength - the caller sets this value to the length of the - the array in terms of number of elements. - HidP_GetLinkCollectionNodes sets this value to the actual - number of elements set. The total number of nodes required to - describe this HID device can be found in the - NumberLinkCollectionNodes field in the HIDP_CAPS structure. - ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(PASSIVE_LEVEL) -NTSTATUS __stdcall -HidP_GetSpecificButtonCaps ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_opt_ USAGE UsagePage, // Optional (0 => ignore) - _In_opt_ USHORT LinkCollection, // Optional (0 => ignore) - _In_opt_ USAGE Usage, // Optional (0 => ignore) - _Out_writes_to_(*ButtonCapsLength, *ButtonCapsLength) PHIDP_BUTTON_CAPS ButtonCaps, - _Inout_ PUSHORT ButtonCapsLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData - ); -/*++ -Description: - HidP_GetButtonCaps returns all the buttons (binary values) that are a part - of the given report type for the Hid device represented by the given - preparsed data. - -Parameters: - ReportType One of HidP_Input, HidP_Output, or HidP_Feature. - - UsagePage A usage page value used to limit the button caps returned to - those on a given usage page. If set to 0, this parameter is - ignored. Can be used with LinkCollection and Usage parameters - to further limit the number of button caps structures returned. - - LinkCollection HIDP_LINK_COLLECTION node array index used to limit the - button caps returned to those buttons in a given link - collection. If set to 0, this parameter is - ignored. Can be used with UsagePage and Usage parameters - to further limit the number of button caps structures - returned. - - Usage A usage value used to limit the button caps returned to those - with the specified usage value. If set to 0, this parameter - is ignored. Can be used with LinkCollection and UsagePage - parameters to further limit the number of button caps - structures returned. - - ButtonCaps A _HIDP_BUTTON_CAPS array containing information about all the - binary values in the given report. This buffer is provided by - the caller. - - ButtonCapsLength As input, this parameter specifies the length of the - ButtonCaps parameter (array) in number of array elements. - As output, this value is set to indicate how many of those - array elements were filled in by the function. The maximum number of - button caps that can be returned is found in the HIDP_CAPS - structure. If HIDP_STATUS_BUFFER_TOO_SMALL is returned, - this value contains the number of array elements needed to - successfully complete the request. - - PreparsedData The preparsed data returned from HIDCLASS. - - -Return Value -HidP_GetSpecificButtonCaps returns the following error codes: - HIDP_STATUS_SUCCESS. - HIDP_STATUS_INVALID_REPORT_TYPE - HIDP_STATUS_INVALID_PREPARSED_DATA - HIDP_STATUS_BUFFER_TOO_SMALL (all given entries however have been filled in) - HIDP_STATUS_USAGE_NOT_FOUND ---*/ -_Must_inspect_result_ -_IRQL_requires_max_(PASSIVE_LEVEL) -NTSTATUS __stdcall -HidP_GetButtonCaps ( - _In_ HIDP_REPORT_TYPE ReportType, - _Out_writes_to_(*ButtonCapsLength, *ButtonCapsLength) PHIDP_BUTTON_CAPS ButtonCaps, - _Inout_ PUSHORT ButtonCapsLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData -); - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_GetSpecificValueCaps ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_opt_ USAGE UsagePage, // Optional (0 => ignore) - _In_opt_ USHORT LinkCollection, // Optional (0 => ignore) - _In_opt_ USAGE Usage, // Optional (0 => ignore) - _Out_writes_to_(*ValueCapsLength, *ValueCapsLength) PHIDP_VALUE_CAPS ValueCaps, - _Inout_ PUSHORT ValueCapsLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData - ); -/*++ -Description: - HidP_GetValueCaps returns all the values (non-binary) that are a part - of the given report type for the Hid device represented by the given - preparsed data. - -Parameters: - ReportType One of HidP_Input, HidP_Output, or HidP_Feature. - - UsagePage A usage page value used to limit the value caps returned to - those on a given usage page. If set to 0, this parameter is - ignored. Can be used with LinkCollection and Usage parameters - to further limit the number of value caps structures returned. - - LinkCollection HIDP_LINK_COLLECTION node array index used to limit the - value caps returned to those buttons in a given link - collection. If set to 0, this parameter is - ignored. Can be used with UsagePage and Usage parameters - to further limit the number of value caps structures - returned. - - Usage A usage value used to limit the value caps returned to those - with the specified usage value. If set to 0, this parameter - is ignored. Can be used with LinkCollection and UsagePage - parameters to further limit the number of value caps - structures returned. - - ValueCaps A _HIDP_VALUE_CAPS array containing information about all the - non-binary values in the given report. This buffer is provided - by the caller. - - ValueLength As input, this parameter specifies the length of the ValueCaps - parameter (array) in number of array elements. As output, - this value is set to indicate how many of those array elements - were filled in by the function. The maximum number of - value caps that can be returned is found in the HIDP_CAPS - structure. If HIDP_STATUS_BUFFER_TOO_SMALL is returned, - this value contains the number of array elements needed to - successfully complete the request. - - PreparsedData The preparsed data returned from HIDCLASS. - - -Return Value -HidP_GetValueCaps returns the following error codes: - HIDP_STATUS_SUCCESS. - HIDP_STATUS_INVALID_REPORT_TYPE - HIDP_STATUS_INVALID_PREPARSED_DATA - HIDP_STATUS_BUFFER_TOO_SMALL (all given entries however have been filled in) - HIDP_STATUS_USAGE_NOT_FOUND - ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_GetValueCaps ( - _In_ HIDP_REPORT_TYPE ReportType, - _Out_writes_to_(*ValueCapsLength, *ValueCapsLength) PHIDP_VALUE_CAPS ValueCaps, - _Inout_ PUSHORT ValueCapsLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData -); - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_GetExtendedAttributes ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USHORT DataIndex, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Out_writes_to_(*LengthAttributes, *LengthAttributes) PHIDP_EXTENDED_ATTRIBUTES Attributes, - _Inout_ PULONG LengthAttributes - ); -/*++ -Description: - Given a data index from the value or button capabilities of a given control - return any extended attributes for the control if any exist. - -Parameters: - ReportType One of HidP_Input, HidP_Output, or HidP_Feature. - - DataIndex The data index for the given control, found in the capabilities - structure for that control - - PreparsedData The preparsed data returned from HIDCLASS. - - Attributes Pointer to a buffer into which the extended attribute data will - be copied. - - LengthAttributes Length of the given buffer in bytes. - -Return Value - HIDP_STATUS_SUCCESS - HIDP_STATUS_DATA_INDEX_NOT_FOUND ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_InitializeReportForID ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ UCHAR ReportID, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Out_writes_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ - -Routine Description: - - Initialize a report based on the given report ID. - -Parameters: - - ReportType One of HidP_Input, HidP_Output, or HidP_Feature. - - PreparasedData Preparsed data structure returned by HIDCLASS - - Report Buffer which to set the data into. - - ReportLength Length of Report...Report should be at least as long as the - value indicated in the HIDP_CAPS structure for the device and - the corresponding ReportType - -Return Value - - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not equal - to the length specified in HIDP_CAPS - structure for the given ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - ---*/ - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_SetData ( - _In_ HIDP_REPORT_TYPE ReportType, - _Inout_updates_to_(*DataLength,*DataLength) PHIDP_DATA DataList, - _Inout_ PULONG DataLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ - -Routine Description: - - Please Note: Since usage value arrays deal with multiple fields for - for one usage value, they cannot be used with HidP_SetData - and HidP_GetData. In this case, - HIDP_STATUS_IS_USAGE_VALUE_ARRAY will be returned. - -Parameters: - - ReportType One of HidP_Input, HidP_Output, or HidP_Feature. - - DataList Array of HIDP_DATA structures that contains the data values - that are to be set into the given report - - DataLength As input, length in array elements of DataList. As output, - contains the number of data elements set on successful - completion or an index into the DataList array to identify - the faulting HIDP_DATA value if an error code is returned. - - PreparasedData Preparsed data structure returned by HIDCLASS - - Report Buffer which to set the data into. - - ReportLength Length of Report...Report should be at least as long as the - value indicated in the HIDP_CAPS structure for the device and - the corresponding ReportType - -Return Value - HidP_SetData returns the following error codes. The report packet will - have all the data set up until the HIDP_DATA structure that caused the - error. DataLength, in the error case, will return this problem index. - - HIDP_STATUS_SUCCESS -- upon successful insertion of all data - into the report packet. - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_DATA_INDEX_NOT_FOUND -- if a HIDP_DATA structure referenced a - data index that does not exist for this - device's ReportType - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not equal - to the length specified in HIDP_CAPS - structure for the given ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_IS_USAGE_VALUE_ARRAY -- if one of the HIDP_DATA structures - references a usage value array. - DataLength will contain the index into - the array that was invalid - HIDP_STATUS_BUTTON_NOT_PRESSED -- if a HIDP_DATA structure attempted - to unset a button that was not already - set in the Report - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- a HIDP_DATA structure was found with - a valid index value but is contained - in a different report than the one - currently being processed - HIDP_STATUS_BUFFER_TOO_SMALL -- if there are not enough entries in - a given Main Array Item to report all - buttons that have been requested to be - set ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_GetData ( - _In_ HIDP_REPORT_TYPE ReportType, - _Out_writes_to_(*DataLength,*DataLength) PHIDP_DATA DataList, - _Inout_ PULONG DataLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Out_writes_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ - -Routine Description: - - Please Note: For obvious reasons HidP_SetData and HidP_GetData will not - access UsageValueArrays. - -Parameters: - ReportType One of HidP_Input, HidP_Output, or HidP_Feature. - - DataList Array of HIDP_DATA structures that will receive the data - values that are set in the given report - - DataLength As input, length in array elements of DataList. As output, - contains the number of data elements that were successfully - set by HidP_GetData. The maximum size necessary for DataList - can be determined by calling HidP_MaxDataListLength - - PreparsedData Preparsed data structure returned by HIDCLASS - - Report Buffer which to set the data into. - - ReportLength Length of Report...Report should be at least as long as the - value indicated in the HIDP_CAPS structure for the device and - the corresponding ReportType - -Return Value - HidP_GetData returns the following error codes. - - HIDP_STATUS_SUCCESS -- upon successful retrieval of all data - from the report packet. - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not equal - to the length specified in HIDP_CAPS - structure for the given ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_BUFFER_TOO_SMALL -- if there are not enough array entries in - DataList to store all the indice values - in the given report. DataLength will - contain the number of array entries - required to hold all data ---*/ - -_IRQL_requires_max_(DISPATCH_LEVEL) -ULONG __stdcall -HidP_MaxDataListLength ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ PHIDP_PREPARSED_DATA PreparsedData - ); -/*++ -Routine Description: - - This function returns the maximum length of HIDP_DATA elements that - HidP_GetData could return for the given report type. - -Parameters: - - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - PreparsedData Preparsed data structure returned by HIDCLASS - -Return Value: - - The length of the data list array required for the HidP_GetData function - call. If an error occurs (either HIDP_STATUS_INVALID_REPORT_TYPE or - HIDP_STATUS_INVALID_PREPARSED_DATA), this function returns 0. - ---*/ - -#define HidP_SetButtons(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) \ - HidP_SetUsages(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_SetUsages ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _Inout_updates_to_(*UsageLength,*UsageLength) PUSAGE UsageList, - _Inout_ PULONG UsageLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ - -Routine Description: - This function sets binary values (buttons) in a report. Given an - initialized packet of correct length, it modifies the report packet so that - each element in the given list of usages has been set in the report packet. - For example, in an output report with 5 LED's, each with a given usage, - an application could turn on any subset of these lights by placing their - usages in any order into the usage array (UsageList). HidP_SetUsages would, - in turn, set the appropriate bit or add the corresponding byte into the - HID Main Array Item. - - A properly initialized Report packet is one of the correct byte length, - and all zeros. - - NOTE: A packet that has already been set with a call to a HidP_Set routine - can also be passed in. This routine then sets processes the UsageList - in the same fashion but verifies that the ReportID already set in - Report matches the report ID for the given usages. - -Parameters: - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - UsagePage All of the usages in the usage array, which HidP_SetUsages will - set in the report, refer to this same usage page. - If a client wishes to set usages in a report for multiple - usage pages then that client needs to make multiple calls to - HidP_SetUsages for each of the usage pages. - - UsageList A usage array containing the usages that HidP_SetUsages will set in - the report packet. - - UsageLength The length of the given usage array in array elements. - The parser will set this value to the position in the usage - array where it stopped processing. If successful, UsageLength - will be unchanged. In any error condition, this parameter - reflects how many of the usages in the usage list have - actually been set by the parser. This is useful for finding - the usage in the list which caused the error. - - PreparsedData The preparsed data recevied from HIDCLASS - - Report The report packet. - - ReportLength Length of the given report packet...Must be equal to the - value reported in the HIDP_CAPS structure for the device - and corresponding report type. - -Return Value - HidP_SetUsages returns the following error codes. On error, the report packet - will be correct up until the usage element that caused the error. - - HIDP_STATUS_SUCCESS -- upon successful insertion of all usages - into the report packet. - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if a usage was found that exists in a - different report. If the report is - zero-initialized on entry the first - usage in the list will determine which - report ID is used. Otherwise, the - parser will verify that usage matches - the passed in report's ID - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage does not exist for any - report (no matter what the report ID) - for the given report type. - HIDP_STATUS_BUFFER_TOO_SMALL -- if there are not enough entries in a - given Main Array Item to list all of - the given usages. The caller needs - to split his request into more than - one call ---*/ - -#define HidP_UnsetButtons(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) \ - HidP_UnsetUsages(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_UnsetUsages ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _Inout_updates_to_(*UsageLength,*UsageLength) PUSAGE UsageList, - _Inout_ PULONG UsageLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ - -Routine Description: - This function unsets (turns off) binary values (buttons) in the report. Given - an initialized packet of correct length, it modifies the report packet so - that each element in the given list of usages has been unset in the - report packet. - - This function is the "undo" operation for SetUsages. If the given usage - is not already set in the Report, it will return an error code of - HIDP_STATUS_BUTTON_NOT_PRESSED. If the button is pressed, HidP_UnsetUsages - will unset the appropriate bit or remove the corresponding index value from - the HID Main Array Item. - - A properly initialized Report packet is one of the correct byte length, - and all zeros.. - - NOTE: A packet that has already been set with a call to a HidP_Set routine - can also be passed in. This routine then processes the UsageList - in the same fashion but verifies that the ReportID already set in - Report matches the report ID for the given usages. - -Parameters: - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - UsagePage All of the usages in the usage array, which HidP_UnsetUsages will - unset in the report, refer to this same usage page. - If a client wishes to unset usages in a report for multiple - usage pages then that client needs to make multiple calls to - HidP_UnsetUsages for each of the usage pages. - - UsageList A usage array containing the usages that HidP_UnsetUsages will - unset in the report packet. - - UsageLength The length of the given usage array in array elements. - The parser will set this value to the position in the usage - array where it stopped processing. If successful, UsageLength - will be unchanged. In any error condition, this parameter - reflects how many of the usages in the usage list have - actually been unset by the parser. This is useful for finding - the usage in the list which caused the error. - - PreparsedData The preparsed data recevied from HIDCLASS - - Report The report packet. - - ReportLength Length of the given report packet...Must be equal to the - value reported in the HIDP_CAPS structure for the device - and corresponding report type. - -Return Value - HidP_UnsetUsages returns the following error codes. On error, the report - packet will be correct up until the usage element that caused the error. - - HIDP_STATUS_SUCCESS -- upon successful "unsetting" of all usages - in the report packet. - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if a usage was found that exists in a - different report. If the report is - zero-initialized on entry the first - usage in the list will determine which - report ID is used. Otherwise, the - parser will verify that usage matches - the passed in report's ID - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage does not exist for any - report (no matter what the report ID) - for the given report type. - HIDP_STATUS_BUTTON_NOT_PRESSED -- if a usage corresponds to a button that - is not already set in the given report ---*/ - -#define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \ - HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_GetUsages ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _Out_writes_to_(*UsageLength, *UsageLength) PUSAGE UsageList, - _Inout_ PULONG UsageLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Out_writes_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ - -Routine Description: - This function returns the binary values (buttons) that are set in a HID - report. Given a report packet of correct length, it searches the report - packet for each usage for the given usage page and returns them in the - usage list. - -Parameters: - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - UsagePage All of the usages in the usage list, which HidP_GetUsages will - retrieve in the report, refer to this same usage page. - If the client wishes to get usages in a packet for multiple - usage pages then that client needs to make multiple calls - to HidP_GetUsages. - - LinkCollection An optional value which can limit which usages are returned - in the UsageList to those usages that exist in a specific - LinkCollection. A non-zero value indicates the index into - the HIDP_LINK_COLLECITON_NODE list returned by - HidP_GetLinkCollectionNodes of the link collection the - usage should belong to. A value of 0 indicates this - should value be ignored. - - UsageList The usage array that will contain all the usages found in - the report packet. - - UsageLength The length of the given usage array in array elements. - On input, this value describes the length of the usage list. - On output, HidP_GetUsages sets this value to the number of - usages that was found. Use HidP_MaxUsageListLength to - determine the maximum length needed to return all the usages - that a given report packet may contain. - - PreparsedData Preparsed data structure returned by HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet - - -Return Value - HidP_GetUsages returns the following error codes: - - HIDP_STATUS_SUCCESS -- upon successfully retrieving all the - usages from the report packet - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_BUFFER_TOO_SMALL -- if the UsageList is not big enough to - hold all the usages found in the report - packet. If this is returned, the buffer - will contain UsageLength number of - usages. Use HidP_MaxUsageListLength to - find the maximum length needed - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if no usages were found but usages - that match the UsagePage and - LinkCollection specified could be found - in a report with a different report ID - HIDP_STATUS_USAGE_NOT_FOUND -- if there are no usages in a reports for - the device and ReportType that match the - UsagePage and LinkCollection that were - specified ---*/ - -#define HidP_GetButtonsEx(Rty, LCo, BLi, ULe, Ppd, Rep, RLe) \ - HidP_GetUsagesEx(Rty, LCo, BLi, ULe, Ppd, Rep, RLe) - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_GetUsagesEx ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_opt_ USHORT LinkCollection, // Optional - _Inout_updates_to_(*UsageLength,*UsageLength) PUSAGE_AND_PAGE ButtonList, - _Inout_ ULONG * UsageLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); - -/*++ - -Routine Description: - This function returns the binary values (buttons) in a HID report. - Given a report packet of correct length, it searches the report packet - for all buttons and returns the UsagePage and Usage for each of the buttons - it finds. - -Parameters: - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - LinkCollection An optional value which can limit which usages are returned - in the ButtonList to those usages that exist in a specific - LinkCollection. A non-zero value indicates the index into - the HIDP_LINK_COLLECITON_NODE list returned by - HidP_GetLinkCollectionNodes of the link collection the - usage should belong to. A value of 0 indicates this - should value be ignored. - - ButtonList An array of USAGE_AND_PAGE structures describing all the - buttons currently ``down'' in the device. - - UsageLength The length of the given array in terms of elements. - On input, this value describes the length of the list. On - output, HidP_GetUsagesEx sets this value to the number of - usages that were found. Use HidP_MaxUsageListLength to - determine the maximum length needed to return all the usages - that a given report packet may contain. - - PreparsedData Preparsed data returned by HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet. - - -Return Value - HidP_GetUsagesEx returns the following error codes: - - HIDP_STATUS_SUCCESS -- upon successfully retrieving all the - usages from the report packet - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_BUFFER_TOO_SMALL -- if ButtonList is not big enough to - hold all the usages found in the report - packet. If this is returned, the buffer - will contain UsageLength number of - usages. Use HidP_MaxUsageListLength to - find the maximum length needed - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- if no usages were found but usages - that match the specified LinkCollection - exist in report with a different report - ID. - HIDP_STATUS_USAGE_NOT_FOUND -- if there are no usages in any reports that - match the LinkCollection parameter ---*/ - -_IRQL_requires_max_(PASSIVE_LEVEL) -ULONG __stdcall -HidP_MaxUsageListLength ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_opt_ USAGE UsagePage, // Optional - _In_ PHIDP_PREPARSED_DATA PreparsedData - ); -/*++ -Routine Description: - This function returns the maximum number of usages that a call to - HidP_GetUsages or HidP_GetUsagesEx could return for a given HID report. - If calling for number of usages returned by HidP_GetUsagesEx, use 0 as - the UsagePage value. - -Parameters: - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - UsagePage Specifies the optional UsagePage to query for. If 0, will - return all the maximum number of usage values that could be - returned for a given ReportType. If non-zero, will return - the maximum number of usages that would be returned for the - ReportType with the given UsagePage. - - PreparsedData Preparsed data returned from HIDCLASS - -Return Value: - The length of the usage list array required for the HidP_GetUsages or - HidP_GetUsagesEx function call. If an error occurs (such as - HIDP_STATUS_INVALID_REPORT_TYPE or HIDP_INVALID_PREPARSED_DATA, this - returns 0. ---*/ - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_SetUsageValue ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _In_ USAGE Usage, - _In_ ULONG UsageValue, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Inout_updates_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); -/*++ -Description: - HidP_SetUsageValue inserts a value into the HID Report Packet in the field - corresponding to the given usage page and usage. HidP_SetUsageValue - casts this value to the appropriate bit length. If a report packet - contains two different fields with the same Usage and UsagePage, - they can be distinguished with the optional LinkCollection field value. - Using this function sets the raw value into the report packet with - no checking done as to whether it actually falls within the logical - minimum/logical maximum range. Use HidP_SetScaledUsageValue for this... - - NOTE: Although the UsageValue parameter is a ULONG, any casting that is - done will preserve or sign-extend the value. The value being set - should be considered a LONG value and will be treated as such by - this function. - -Parameters: - - ReportType One of HidP_Output or HidP_Feature. - - UsagePage The usage page to which the given usage refers. - - LinkCollection (Optional) This value can be used to differentiate - between two fields that may have the same - UsagePage and Usage but exist in different - collections. If the link collection value - is zero, this function will set the first field - it finds that matches the usage page and - usage. - - Usage The usage whose value HidP_SetUsageValue will set. - - UsageValue The raw value to set in the report buffer. This value must be within - the logical range or if a NULL value this value should be the - most negative value that can be represented by the number of bits - for this field. - - PreparsedData The preparsed data returned for HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet. - - -Return Value: - HidP_SetUsageValue returns the following error codes: - - HIDP_STATUS_SUCCESS -- upon successfully setting the value - in the report packet - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and - link collection exist but exists in - a report with a different report ID - than the report being passed in. To - set this value, call HidP_SetUsageValue - again with a zero-initizialed report - packet - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link - collection combination does not exist - in any reports for this ReportType ---*/ -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_SetScaledUsageValue ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _In_ USAGE Usage, - _In_ LONG UsageValue, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Inout_updates_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); - -/*++ -Description: - HidP_SetScaledUsageValue inserts the UsageValue into the HID report packet - in the field corresponding to the given usage page and usage. If a report - packet contains two different fields with the same Usage and UsagePage, - they can be distinguished with the optional LinkCollection field value. - - If the specified field has a defined physical range, this function converts - the physical value specified to the corresponding logical value for the - report. If a physical value does not exist, the function will verify that - the value specified falls within the logical range and set according. - - If the range checking fails but the field has NULL values, the function will - set the field to the defined NULL value (most negative number possible) and - return HIDP_STATUS_NULL. In other words, use this function to set NULL - values for a given field by passing in a value that falls outside the - physical range if it is defined or the logical range otherwise. - - If the field does not support NULL values, an out of range error will be - returned instead. - -Parameters: - - ReportType One of HidP_Output or HidP_Feature. - - UsagePage The usage page to which the given usage refers. - - LinkCollection (Optional) This value can be used to differentiate - between two fields that may have the same - UsagePage and Usage but exist in different - collections. If the link collection value - is zero, this function will set the first field - it finds that matches the usage page and - usage. - - Usage The usage whose value HidP_SetScaledUsageValue will set. - - UsageValue The value to set in the report buffer. See the routine - description above for the different interpretations of this - value - - PreparsedData The preparsed data returned from HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet. - - -Return Value: - HidP_SetScaledUsageValue returns the following error codes: - - HIDP_STATUS_SUCCESS -- upon successfully setting the value - in the report packet - HIDP_STATUS_NULL -- upon successfully setting the value - in the report packet as a NULL value - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_VALUE_OUT_OF_RANGE -- if the value specified failed to fall - within the physical range if it exists - or within the logical range otherwise - and the field specified by the usage - does not allow NULL values - HIDP_STATUS_BAD_LOG_PHY_VALUES -- if the field has a physical range but - either the logical range is invalid - (max <= min) or the physical range is - invalid - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and - link collection exist but exists in - a report with a different report ID - than the report being passed in. To - set this value, call - HidP_SetScaledUsageValue again with - a zero-initialized report packet - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link - collection combination does not exist - in any reports for this ReportType ---*/ -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_SetUsageValueArray ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _In_ USAGE Usage, - _In_reads_bytes_(UsageValueByteLength) PCHAR UsageValue, - _In_ USHORT UsageValueByteLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _Inout_updates_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); - -/*++ -Routine Descripton: - A usage value array occurs when the last usage in the list of usages - describing a main item must be repeated because there are less usages defined - than there are report counts declared for the given main item. In this case - a single value cap is allocated for that usage and the report count of that - value cap is set to reflect the number of fields to which that usage refers. - - HidP_SetUsageValueArray sets the raw bits for that usage which spans - more than one field in a report. - - NOTE: This function currently does not support value arrays where the - ReportSize for each of the fields in the array is not a multiple - of 8 bits. - - The UsageValue buffer should have the values set as they would appear - in the report buffer. If this function supported non 8-bit multiples - for the ReportSize then caller should format the input buffer so that - each new value begins at the bit immediately following the last bit - of the previous value - -Parameters: - - ReportType One of HidP_Output or HidP_Feature. - - UsagePage The usage page to which the given usage refers. - - LinkCollection (Optional) This value can be used to differentiate - between two fields that may have the same - UsagePage and Usage but exist in different - collections. If the link collection value - is zero, this function will set the first field - it finds that matches the usage page and - usage. - - Usage The usage whose value array HidP_SetUsageValueArray will set. - - UsageValue The buffer with the values to set into the value array. - The number of BITS required is found by multiplying the - BitSize and ReportCount fields of the Value Cap for this - control. The least significant bit of this control found in the - given report will be placed in the least significan bit location - of the array given (little-endian format), regardless of whether - or not the field is byte alligned or if the BitSize is a multiple - of sizeof (CHAR). - - See the above note for current implementation limitations. - - UsageValueByteLength Length of the UsageValue buffer (in bytes) - - PreparsedData The preparsed data returned from HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet. - - -Return Value: - HIDP_STATUS_SUCCESS -- upon successfully setting the value - array in the report packet - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_NOT_VALUE_ARRAY -- if the control specified is not a - value array -- a value array will have - a ReportCount field in the - HIDP_VALUE_CAPS structure that is > 1 - Use HidP_SetUsageValue instead - HIDP_STATUS_BUFFER_TOO_SMALL -- if the size of the passed in buffer with - the values to set is too small (ie. has - fewer values than the number of fields in - the array - HIDP_STATUS_NOT_IMPLEMENTED -- if the usage value array has field sizes - that are not multiples of 8 bits, this - error code is returned since the function - currently does not handle setting into - such arrays. - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and - link collection exist but exists in - a report with a different report ID - than the report being passed in. To - set this value, call - HidP_SetUsageValueArray again with - a zero-initialized report packet - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link - collection combination does not exist - in any reports for this ReportType ---*/ - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_GetUsageValue ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _In_ USAGE Usage, - _Out_ PULONG UsageValue, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); - -/* -Description - HidP_GetUsageValue retrieves the value from the HID Report for the usage - specified by the combination of usage page, usage and link collection. - If a report packet contains two different fields with the same - Usage and UsagePage, they can be distinguished with the optional - LinkCollection field value. - -Parameters: - - ReportType One of HidP_Input or HidP_Feature. - - UsagePage The usage page to which the given usage refers. - - LinkCollection (Optional) This value can be used to differentiate - between two fields that may have the same - UsagePage and Usage but exist in different - collections. If the link collection value - is zero, this function will set the first field - it finds that matches the usage page and - usage. - - Usage The usage whose value HidP_GetUsageValue will retrieve - - UsageValue The raw value that is set for the specified field in the report - buffer. This value will either fall within the logical range - or if NULL values are allowed, a number outside the range to - indicate a NULL - - PreparsedData The preparsed data returned for HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet. - - -Return Value: - HidP_GetUsageValue returns the following error codes: - - HIDP_STATUS_SUCCESS -- upon successfully retrieving the value - from the report packet - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_REPORT_DOES_NOT_EXIST -- if there are no reports on this device - for the given ReportType - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and - link collection exist but exists in - a report with a different report ID - than the report being passed in. To - set this value, call HidP_GetUsageValue - again with a different report packet - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link - collection combination does not exist - in any reports for this ReportType ---*/ - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_GetScaledUsageValue ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _In_ USAGE Usage, - _Out_ PLONG UsageValue, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); - -/*++ -Description - HidP_GetScaledUsageValue retrieves a UsageValue from the HID report packet - in the field corresponding to the given usage page and usage. If a report - packet contains two different fields with the same Usage and UsagePage, - they can be distinguished with the optional LinkCollection field value. - - If the specified field has a defined physical range, this function converts - the logical value that exists in the report packet to the corresponding - physical value. If a physical range does not exist, the function will - return the logical value. This function will check to verify that the - logical value in the report falls within the declared logical range. - - When doing the conversion between logical and physical values, this - function assumes a linear extrapolation between the physical max/min and - the logical max/min. (Where logical is the values reported by the device - and physical is the value returned by this function). If the data field - size is less than 32 bits, then HidP_GetScaledUsageValue will sign extend - the value to 32 bits. - - If the range checking fails but the field has NULL values, the function - will set UsageValue to 0 and return HIDP_STATUS_NULL. Otherwise, it - returns a HIDP_STATUS_OUT_OF_RANGE error. - -Parameters: - - ReportType One of HidP_Output or HidP_Feature. - - UsagePage The usage page to which the given usage refers. - - LinkCollection (Optional) This value can be used to differentiate - between two fields that may have the same - UsagePage and Usage but exist in different - collections. If the link collection value - is zero, this function will retrieve the first - field it finds that matches the usage page - and usage. - - Usage The usage whose value HidP_GetScaledUsageValue will retrieve - - UsageValue The value retrieved from the report buffer. See the routine - description above for the different interpretations of this - value - - PreparsedData The preparsed data returned from HIDCLASS - - Report The report packet. - - ReportLength Length (in bytes) of the given report packet. - - -Return Value: - HidP_GetScaledUsageValue returns the following error codes: - - HIDP_STATUS_SUCCESS -- upon successfully retrieving the value - from the report packet - HIDP_STATUS_NULL -- if the report packet had a NULL value - set - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_VALUE_OUT_OF_RANGE -- if the value retrieved from the packet - falls outside the logical range and - the field does not support NULL values - HIDP_STATUS_BAD_LOG_PHY_VALUES -- if the field has a physical range but - either the logical range is invalid - (max <= min) or the physical range is - invalid - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and - link collection exist but exists in - a report with a different report ID - than the report being passed in. To - set this value, call - HidP_GetScaledUsageValue with a - different report packet - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link - collection combination does not exist - in any reports for this ReportType ---*/ -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_GetUsageValueArray ( - _In_ HIDP_REPORT_TYPE ReportType, - _In_ USAGE UsagePage, - _In_opt_ USHORT LinkCollection, - _In_ USAGE Usage, - _Inout_updates_bytes_(UsageValueByteLength) PCHAR UsageValue, - _In_ USHORT UsageValueByteLength, - _In_ PHIDP_PREPARSED_DATA PreparsedData, - _In_reads_bytes_(ReportLength) PCHAR Report, - _In_ ULONG ReportLength - ); - -/*++ -Routine Descripton: - A usage value array occurs when the last usage in the list of usages - describing a main item must be repeated because there are less usages defined - than there are report counts declared for the given main item. In this case - a single value cap is allocated for that usage and the report count of that - value cap is set to reflect the number of fields to which that usage refers. - - HidP_GetUsageValueArray returns the raw bits for that usage which spans - more than one field in a report. - - NOTE: This function currently does not support value arrays where the - ReportSize for each of the fields in the array is not a multiple - of 8 bits. - - The UsageValue buffer will have the raw values as they are set - in the report packet. - -Parameters: - - ReportType One of HidP_Input, HidP_Output or HidP_Feature. - - UsagePage The usage page to which the given usage refers. - - LinkCollection (Optional) This value can be used to differentiate - between two fields that may have the same - UsagePage and Usage but exist in different - collections. If the link collection value - is zero, this function will set the first field - it finds that matches the usage page and - usage. - - Usage The usage whose value HidP_GetUsageValueArray will retreive. - - UsageValue A pointer to an array of characters where the value will be - placed. The number of BITS required is found by multiplying the - BitSize and ReportCount fields of the Value Cap for this - control. The least significant bit of this control found in the - given report will be placed in the least significant bit location - of the buffer (little-endian format), regardless of whether - or not the field is byte aligned or if the BitSize is a multiple - of sizeof (CHAR). - - See note above about current implementation limitations - - UsageValueByteLength - the length of the given UsageValue buffer. - - PreparsedData The preparsed data returned by the HIDCLASS - - Report The report packet. - - ReportLength Length of the given report packet. - -Return Value: - - HIDP_STATUS_SUCCESS -- upon successfully retrieving the value - from the report packet - HIDP_STATUS_INVALID_REPORT_TYPE -- if ReportType is not valid. - HIDP_STATUS_INVALID_PREPARSED_DATA -- if PreparsedData is not valid - HIDP_STATUS_INVALID_REPORT_LENGTH -- the length of the report packet is not - equal to the length specified in - the HIDP_CAPS structure for the given - ReportType - HIDP_STATUS_NOT_VALUE_ARRAY -- if the control specified is not a - value array -- a value array will have - a ReportCount field in the - HIDP_VALUE_CAPS structure that is > 1 - Use HidP_GetUsageValue instead - HIDP_STATUS_BUFFER_TOO_SMALL -- if the size of the passed in buffer in - which to return the array is too small - (ie. has fewer values than the number of - fields in the array - HIDP_STATUS_NOT_IMPLEMENTED -- if the usage value array has field sizes - that are not multiples of 8 bits, this - error code is returned since the function - currently does not handle getting values - from such arrays. - HIDP_STATUS_INCOMPATIBLE_REPORT_ID -- the specified usage page, usage and - link collection exist but exists in - a report with a different report ID - than the report being passed in. To - set this value, call - HidP_GetUsageValueArray with a - different report packet - HIDP_STATUS_USAGE_NOT_FOUND -- if the usage page, usage, and link - collection combination does not exist - in any reports for this ReportType ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_UsageListDifference ( - _In_reads_(UsageListLength) PUSAGE PreviousUsageList, - _In_reads_(UsageListLength) PUSAGE CurrentUsageList, - _Out_writes_(UsageListLength) PUSAGE BreakUsageList, - _Out_writes_(UsageListLength) PUSAGE MakeUsageList, - _In_ ULONG UsageListLength - ); -/*++ -Routine Description: - This function will return the difference between a two lists of usages - (as might be returned from HidP_GetUsages), In other words, it will return - return a list of usages that are in the current list but not the previous - list as well as a list of usages that are in the previous list but not - the current list. - -Parameters: - - PreviousUsageList The list of usages before. - CurrentUsageList The list of usages now. - BreakUsageList Previous - Current. - MakeUsageList Current - Previous. - UsageListLength Represents the length of the usage lists in array - elements. If comparing two lists with a differing - number of array elements, this value should be - the size of the larger of the two lists. Any - zero found with a list indicates an early termination - of the list and any usages found after the first zero - will be ignored. ---*/ - -_Must_inspect_result_ -_IRQL_requires_max_(DISPATCH_LEVEL) -NTSTATUS __stdcall -HidP_UsageAndPageListDifference ( - _In_reads_(UsageListLength) PUSAGE_AND_PAGE PreviousUsageList, - _In_reads_(UsageListLength) PUSAGE_AND_PAGE CurrentUsageList, - _Out_writes_(UsageListLength) PUSAGE_AND_PAGE BreakUsageList, - _Out_writes_(UsageListLength) PUSAGE_AND_PAGE MakeUsageList, - _In_ ULONG UsageListLength - ); - -// -// Produce Make or Break Codes -// -typedef enum _HIDP_KEYBOARD_DIRECTION { - HidP_Keyboard_Break, - HidP_Keyboard_Make -} HIDP_KEYBOARD_DIRECTION; - -// -// A bitmap of the current shift state of the keyboard when using the -// below keyboard usages to i8042 translation function. -// -typedef struct _HIDP_KEYBOARD_MODIFIER_STATE { - union { - struct { - ULONG LeftControl: 1; - ULONG LeftShift: 1; - ULONG LeftAlt: 1; - ULONG LeftGUI: 1; - ULONG RightControl: 1; - ULONG RightShift: 1; - ULONG RightAlt: 1; - ULONG RigthGUI: 1; - ULONG CapsLock: 1; - ULONG ScollLock: 1; - ULONG NumLock: 1; - ULONG Reserved: 21; - }; - ULONG ul; - }; - -} HIDP_KEYBOARD_MODIFIER_STATE, * PHIDP_KEYBOARD_MODIFIER_STATE; - -// -// A call back function to give the i8042 scan codes to the caller of -// the below translation function. -// -typedef BOOLEAN (* PHIDP_INSERT_SCANCODES) ( - _In_opt_ PVOID Context, // Some caller supplied context. - _In_reads_bytes_(Length) PCHAR NewScanCodes, // A list of i8042 scan codes. - _In_ ULONG Length // the length of the scan codes. - ); - -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_TranslateUsageAndPagesToI8042ScanCodes ( - _In_reads_(UsageListLength) PUSAGE_AND_PAGE ChangedUsageList, - _In_ ULONG UsageListLength, - _In_ HIDP_KEYBOARD_DIRECTION KeyAction, - _Inout_ PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, - _In_ PHIDP_INSERT_SCANCODES InsertCodesProcedure, - _In_opt_ PVOID InsertCodesContext - ); -/*++ -Routine Description: -Parameters: ---*/ -_Must_inspect_result_ -NTSTATUS __stdcall -HidP_TranslateUsagesToI8042ScanCodes ( - _In_reads_(UsageListLength) PUSAGE ChangedUsageList, - _In_ ULONG UsageListLength, - _In_ HIDP_KEYBOARD_DIRECTION KeyAction, - _Inout_ PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, - _In_ PHIDP_INSERT_SCANCODES InsertCodesProcedure, - _In_opt_ PVOID InsertCodesContext - ); -/*++ -Routine Description: -Parameters: ---*/ - - - -// -// Define NT Status codes with Facility Code of FACILITY_HID_ERROR_CODE -// - -// FACILITY_HID_ERROR_CODE defined in ntstatus.h -#ifndef FACILITY_HID_ERROR_CODE -#define FACILITY_HID_ERROR_CODE 0x11 -#endif - -#define HIDP_ERROR_CODES(SEV, CODE) \ - ((NTSTATUS) (((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE))) - -#define HIDP_STATUS_SUCCESS (HIDP_ERROR_CODES(0x0,0)) -#define HIDP_STATUS_NULL (HIDP_ERROR_CODES(0x8,1)) -#define HIDP_STATUS_INVALID_PREPARSED_DATA (HIDP_ERROR_CODES(0xC,1)) -#define HIDP_STATUS_INVALID_REPORT_TYPE (HIDP_ERROR_CODES(0xC,2)) -#define HIDP_STATUS_INVALID_REPORT_LENGTH (HIDP_ERROR_CODES(0xC,3)) -#define HIDP_STATUS_USAGE_NOT_FOUND (HIDP_ERROR_CODES(0xC,4)) -#define HIDP_STATUS_VALUE_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC,5)) -#define HIDP_STATUS_BAD_LOG_PHY_VALUES (HIDP_ERROR_CODES(0xC,6)) -#define HIDP_STATUS_BUFFER_TOO_SMALL (HIDP_ERROR_CODES(0xC,7)) -#define HIDP_STATUS_INTERNAL_ERROR (HIDP_ERROR_CODES(0xC,8)) -#define HIDP_STATUS_I8042_TRANS_UNKNOWN (HIDP_ERROR_CODES(0xC,9)) -#define HIDP_STATUS_INCOMPATIBLE_REPORT_ID (HIDP_ERROR_CODES(0xC,0xA)) -#define HIDP_STATUS_NOT_VALUE_ARRAY (HIDP_ERROR_CODES(0xC,0xB)) -#define HIDP_STATUS_IS_VALUE_ARRAY (HIDP_ERROR_CODES(0xC,0xC)) -#define HIDP_STATUS_DATA_INDEX_NOT_FOUND (HIDP_ERROR_CODES(0xC,0xD)) -#define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC,0xE)) -#define HIDP_STATUS_BUTTON_NOT_PRESSED (HIDP_ERROR_CODES(0xC,0xF)) -#define HIDP_STATUS_REPORT_DOES_NOT_EXIST (HIDP_ERROR_CODES(0xC,0x10)) -#define HIDP_STATUS_NOT_IMPLEMENTED (HIDP_ERROR_CODES(0xC,0x20)) - -// -// We blundered this status code. -// -#define HIDP_STATUS_I8242_TRANS_UNKNOWN HIDP_STATUS_I8042_TRANS_UNKNOWN - -#include - -#if _MSC_VER >= 1200 -#pragma warning(pop) -#else -#pragma warning(default:4115) -#pragma warning(default:4201) -#pragma warning(default:4214) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ -#pragma endregion - -#endif diff --git a/src/archutils/Win32/ddk/hidsdi.h b/src/archutils/Win32/ddk/hidsdi.h deleted file mode 100644 index 925e26cd9b..0000000000 --- a/src/archutils/Win32/ddk/hidsdi.h +++ /dev/null @@ -1,520 +0,0 @@ -/*++ - -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 deleted file mode 100644 index c4c31e5bb6..0000000000 --- a/src/archutils/Win32/ddk/hidusage.h +++ /dev/null @@ -1,3017 +0,0 @@ -/*++ - -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 deleted file mode 100644 index 45fdfe5df9..0000000000 --- a/src/archutils/Win32/ddk/setupapi.h +++ /dev/null @@ -1,7640 +0,0 @@ -/*++ - -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 diff --git a/src/archutils/Win32/ddk/x64/dbghelp.lib b/src/archutils/Win32/ddk/x64/dbghelp.lib deleted file mode 100644 index 07608792d4..0000000000 Binary files a/src/archutils/Win32/ddk/x64/dbghelp.lib and /dev/null differ diff --git a/src/archutils/Win32/ddk/x64/hid.lib b/src/archutils/Win32/ddk/x64/hid.lib deleted file mode 100644 index 302cf5a5b5..0000000000 Binary files a/src/archutils/Win32/ddk/x64/hid.lib and /dev/null differ diff --git a/src/archutils/Win32/ddk/x64/setupapi.lib b/src/archutils/Win32/ddk/x64/setupapi.lib deleted file mode 100644 index 02f2981a24..0000000000 Binary files a/src/archutils/Win32/ddk/x64/setupapi.lib and /dev/null differ diff --git a/src/archutils/Win32/ddk/x86/dbghelp.lib b/src/archutils/Win32/ddk/x86/dbghelp.lib deleted file mode 100644 index f5d71d423a..0000000000 Binary files a/src/archutils/Win32/ddk/x86/dbghelp.lib and /dev/null differ diff --git a/src/archutils/Win32/ddk/x86/hid.lib b/src/archutils/Win32/ddk/x86/hid.lib deleted file mode 100644 index 0b59a66efd..0000000000 Binary files a/src/archutils/Win32/ddk/x86/hid.lib and /dev/null differ diff --git a/src/archutils/Win32/ddk/x86/setupapi.lib b/src/archutils/Win32/ddk/x86/setupapi.lib deleted file mode 100644 index a0be46975d..0000000000 Binary files a/src/archutils/Win32/ddk/x86/setupapi.lib and /dev/null differ