ecdisp.c
来自「winddk src目录下的WDM源码压缩!」· C语言 代码 · 共 1,674 行 · 第 1/5 页
C
1,674 行
{ HIDP_INITIALIZE_REPORT_FOR_ID, "HidP_InitializeReportForID" },
{ HIDP_MAX_DATA_LIST_LENGTH, "HidP_MaxDataListLength" },
{ HIDP_MAX_USAGE_LIST_LENGTH, "HidP_MaxUsageListLength" },
{ HIDP_SET_BUTTONS, "HidP_SetButtons" },
{ HIDP_SET_DATA, "HidP_SetData" },
{ HIDP_SET_SCALED_USAGE_VALUE, "HidP_SetScaledUsageValue" },
{ HIDP_SET_USAGES, "HidP_SetUsages" },
{ HIDP_SET_USAGE_VALUE, "HidP_SetUsageValue" },
{ HIDP_SET_USAGE_VALUE_ARRAY, "HidP_SetUsageValueArray" },
{ HIDP_TRANSLATE_USAGES, "HidP_TranslateUsagesToI8042ScanCodes" },
{ HIDP_UNSET_BUTTONS, "HidP_UnsetButtons" },
{ HIDP_UNSET_USAGES, "HidP_UnsetUsages" },
{ HIDP_USAGE_LIST_DIFFERENCE, "HidP_UsageListDifference" },
{ HID_CLEAR_REPORT, "Clear Report Buffer" }
};
static PARAMETER_STATE pState[HID_NUMCALLS] = {
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_HID_GUID
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_FREE_PREPARSED_DATA
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_CONFIGURATION
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_SET_CONFIGURATION
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_FLUSH_QUEUE
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GETATTRIBUTES
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE }, // HIDD_SET_FEATURE
{ FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE }, // HIDD_GET_FEATURE
{ FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE }, // HIDD_GET_INPUT_REPORT
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, // HIDD_SET_OUTPUT_REPORT
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_NUM_INPUT_BUFFERS
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_SET_NUM_INPUT_BUFFERS
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_PHYSICAL_DESCRIPTOR
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_MANUFACTURER_STRING
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_PRODUCT_STRING
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_INDEXED_STRING
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_SERIAL_NUMBER_STRING
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDD_GET_MS_GENRE_DESCRIPTOR
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE }, // HID_READ_REPORT
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, // HID_WRITE_BUFFER
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_GET_BUTTON_CAPS
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_BUTTONS
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_BUTTONS_EX
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_GET_CAPS
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, // HIDP_GET_DATA
{ TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, // HIDP_GET_EXTENDED_ATTRIBUTES
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_GET_LINK_COLL_NODES
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_SCALED_USAGE_VALUE
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE }, // HIDP_GET_SPECIFIC_BUTTON_CAPS
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE }, // HIDP_GET_SPECIFIC_VALUE_CAPS
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_USAGES
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_USAGES_EX
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_USAGE_VALUE
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, // HIDP_GET_USAGE_VALUE_ARRAY
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_GET_VALUE_CAPS
{ TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, // HIDP_INITIALIZE_REPORT_FOR_ID
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_MAX_DATA_LIST_LENGTH
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_MAX_USAGE_LIST_LENGTH
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_SET_BUTTONS
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE }, // HIDP_SET_DATA
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, // HIDP_SET_SCALED_USAGE_VALUE
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_SET_USAGES
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, // HIDP_SET_USAGE_VALUE
{ TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE }, // HIDP_SET_USAGE_VALUE_ARRAY
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_TRANSLATE_USAGES
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_UNSET_BUTTONS
{ TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE }, // HIDP_UNSET_USAGES
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // HIDP_USAGE_LIST_DIFFERENCE
{ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE } // HID_CLEAR_BUFFER
};
/*****************************************************************************
/* Local function declarations
/*****************************************************************************/
VOID
vLoadExtCalls(
HWND hExtCalls
);
VOID
vSetReportType(
HWND hDlg,
LONG lId
);
VOID
vInitEditText(
HWND hText,
INT cbTextSize,
CHAR *pchText
);
VOID vEnableParameters(
HWND hDlg,
LRESULT iCallSelection
);
BOOL
fGetAndVerifyParameters(
HWND hDlg,
PECDISPLAY_PARAMS pParams
);
BOOL
ECDisp_Execute(
IN INT FuncCall,
IN OUT PEXTCALL_PARAMS CallParams,
OUT PEXTCALL_STATUS CallStatus
);
VOID
ECDisp_DisplayOutput(
IN HWND hOutputWindow,
IN INT FuncCall,
IN PEXTCALL_PARAMS Results
);
VOID
vExecuteAndDisplayOutput(
HWND hOutputWindow,
PHID_DEVICE pDevice,
INT iFuncCall,
PECDISPLAY_PARAMS pParams
);
CHAR *pchGetHidAppStatusString(
NTSTATUS StatusCode
);
VOID
vInitECControls(
HWND hDlg,
USHORT InputReportByteLength,
PBUFFER_DISPLAY *ppInputDisplay,
USHORT OutputReportByteLength,
PBUFFER_DISPLAY *ppOutputDisplay,
USHORT FeatureReportByteLength,
PBUFFER_DISPLAY *ppFeatureDisplay
);
VOID
BuildReportIDList(
IN PHIDP_BUTTON_CAPS phidButtonCaps,
IN USHORT nButtonCaps,
IN PHIDP_VALUE_CAPS phidValueCaps,
IN USHORT nValueCaps,
OUT UCHAR **ppReportIDList,
OUT INT *nReportIDs
);
LRESULT CALLBACK
bSetUsagesDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bSetValueDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bSetInputBuffDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bSetDataDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bSetBufLenDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bSetInputBuffersDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bGetIndexedDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK
bGetUsageDiffDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
);
BOOL
ConvertStringToUnsignedList(
IN INT iUnsignedSize,
IN INT iBase,
IN OUT PCHAR InString,
OUT PCHAR *UnsignedList,
OUT PULONG nUnsigneds
);
BOOL
ConvertStringToUlongList(
IN OUT PCHAR InString,
OUT PULONG *UlongList,
OUT PULONG nUlongs
);
BOOL
ConvertStringToUsageList(
IN OUT PCHAR InString,
OUT PUSAGE *UsageList,
OUT PULONG nUsages
);
VOID
ECDisp_MakeGUIDString(
IN GUID guid,
OUT CHAR szString[],
IN UINT uiBuffSize
);
PCHAR
ECDisp_GetHidAppStatusString(
NTSTATUS StatusCode
);
BOOL
ECDisp_ConvertUlongListToValueList(
IN PULONG UlongList,
IN ULONG nUlongs,
IN USHORT BitSize,
IN USHORT ReportCount,
OUT PCHAR *ValueList,
OUT PULONG ValueListSize
);
BOOL
SetDlgItemIntHex(
HWND hDlg,
INT nIDDlgItem,
UINT uValue,
INT nBytes
);
PCHAR
ResolveFunctionName(
INT Index
);
DWORD WINAPI
ECDisp_ReadThreadProc(
LPVOID ThreadContext
);
VOID
DisplayExtendedAttributes(
IN HWND OutputWindow,
IN PHIDP_UNKNOWN_TOKEN UnknownList,
IN ULONG UnknownListLength
);
/*****************************************************************************
/* Global function definitions
/*****************************************************************************/
LRESULT CALLBACK
bExtCallDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
static PHID_DEVICE pDevice;
static CHAR szTempBuff[1024];
static CHAR szLabel[512];
static CHAR szValue[512];
static INT iLBCounter;
static UCHAR *pucInputReportIDs;
static UCHAR *pucOutputReportIDs;
static UCHAR *pucFeatureReportIDs;
static INT nInputReportIDs;
static INT nOutputReportIDs;
static INT nFeatureReportIDs;
static HANDLE ReadThread;
static READ_THREAD_CONTEXT readContext;
INT iIndex;
ECDISPLAY_PARAMS params;
DWORD threadID;
switch(message)
{
case WM_INITDIALOG:
/*
// Initializing the dialog box involves the following steps:
// 1) Determine from the parameter the pointer to the selected device
// 2) Initializing the controls in the dialog box to their initial values
// 3) Send a message that our list of routines has changed
*/
pDevice = (PHID_DEVICE) lParam;
vInitECControls(hDlg,
pDevice -> Caps.InputReportByteLength,
&pInputDisplay,
pDevice -> Caps.OutputReportByteLength,
&pOutputDisplay,
pDevice -> Caps.FeatureReportByteLength,
&pFeatureDisplay);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?