📄 hidgame.h
字号:
/*
* The remove plugplay request must use this event to make sure all
* other requests have completed before it deletes the device object.
*/
KEVENT RemoveEvent;
/*
* Number of IRPs underway.
*/
LONG RequestCount;
#ifdef CHANGE_DEVICE
/*
* DeviceObject to send self created IRPs down to.
*/
PDEVICE_OBJECT NextDeviceObject;
#endif /* CHANGE_DEVICE */
/*
* Structure containing analog device specific information.
*/
ANALOG_DEVICE;
/*
* Set to true if the device has been removed => all requests should be failed
*/
BOOLEAN fRemoved;
/*
* Set to true if the device has started
*/
BOOLEAN fStarted;
/*
* Set to true if the device has been surprise removed by PnPs device has started.
*/
BOOLEAN fSurpriseRemoved;
#ifdef CHANGE_DEVICE
/*
* Indicates that a replacement sibling is being started
*/
BOOLEAN fReplaced;
#endif /* CHANGE_DEVICE */
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
#define GET_MINIDRIVER_DEVICE_EXTENSION(DO) \
((PDEVICE_EXTENSION) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension))
#define GET_NEXT_DEVICE_OBJECT(DO) \
(((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->NextDeviceObject)
/*
* Globals
*/
extern HIDGAME_GLOBAL Global;
/*
* Function prototypes
*/
#define INTERNAL /* Called only within a translation unit */
#define EXTERNAL /* Called from other translation units */
/*
* hidgame.c
*/
NTSTATUS EXTERNAL
DriverEntry
(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING registryPath
);
NTSTATUS EXTERNAL
HGM_CreateClose
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS EXTERNAL
HGM_SystemControl
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS EXTERNAL
HGM_AddDevice
(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT FunctionalDeviceObject
);
VOID EXTERNAL
HGM_Unload
(
IN PDRIVER_OBJECT DriverObject
);
/*
* ioctl.c
*/
NTSTATUS EXTERNAL
HGM_InternalIoctl
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS EXTERNAL
HGM_GetDeviceDescriptor
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS INTERNAL
HGM_GetReportDescriptor
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS INTERNAL
HGM_ReadReport
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS INTERNAL
HGM_GetAttributes
(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
);
/*
* pnp.c
*/
NTSTATUS INTERNAL
HGM_IncRequestCount
(
PDEVICE_EXTENSION DeviceExtension
);
VOID INTERNAL
HGM_DecRequestCount
(
PDEVICE_EXTENSION DeviceExtension
);
VOID INTERNAL
HGM_RemoveDevice
(
PDEVICE_EXTENSION DeviceExtension
);
NTSTATUS EXTERNAL
HGM_PnP
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS INTERNAL
HGM_InitDevice
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS INTERNAL
HGM_Power
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp
);
NTSTATUS INTERNAL
HGM_GetResources
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS INTERNAL
HGM_PnPComplete
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
/*
* hidjoy.c
*/
NTSTATUS EXTERNAL
HGM_DriverInit
(
VOID
);
NTSTATUS INTERNAL
HGM_SetupButtons
(
IN OUT PDEVICE_EXTENSION DeviceExtension
);
NTSTATUS INTERNAL
HGM_MapAxesFromDevExt
(
IN OUT PDEVICE_EXTENSION DeviceExtension
);
NTSTATUS INTERNAL
HGM_GenerateReport
(
IN PDEVICE_OBJECT DeviceObject,
OUT UCHAR rgGameReport[MAXBYTES_GAME_REPORT],
OUT PUSHORT pCbReport
);
NTSTATUS INTERNAL
HGM_JoystickConfig
(
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS EXTERNAL
HGM_InitAnalog
(
IN PDEVICE_OBJECT DeviceObject
);
/*
* Sample only code for changing the device
*/
#ifdef CHANGE_DEVICE
VOID
HGM_ChangeHandler
(
IN PDEVICE_OBJECT DeviceObject,
PIO_WORKITEM WorkItem
);
VOID
HGM_DeviceChanged
(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PDEVICE_EXTENSION DeviceExtension
);
VOID
HGM_Game2HID
(
IN PDEVICE_OBJECT DeviceObject,
IN PDEVICE_EXTENSION DeviceExtension,
IN OUT PUHIDGAME_INPUT_DATA pHIDData
);
#else
VOID
HGM_Game2HID
(
IN PDEVICE_EXTENSION DeviceExtension,
IN OUT PUHIDGAME_INPUT_DATA pHIDData
);
#endif /* CHANGE_DEVICE */
/*
* poll.c
*/
NTSTATUS INTERNAL
HGM_AnalogPoll
(
IN PDEVICE_EXTENSION DeviceExtension,
IN UCHAR resistiveInputMask,
IN BOOLEAN bApproximate,
IN OUT ULONG Axis[MAX_AXES],
OUT UCHAR Buttons[PORT_BUTTONS]
);
NTSTATUS
HGM_UpdateLatestPollData
(
IN OUT PDEVICE_EXTENSION DeviceExtension
);
/*
* <CPU>\timing.c (or macro equivalents for external functions)
*/
#ifdef _X86_
BOOLEAN INTERNAL
HGM_x86IsClockAvailable
(
VOID
);
LARGE_INTEGER INTERNAL
HGM_x86ReadCounter
(
IN PLARGE_INTEGER Dummy
);
VOID INTERNAL
HGM_x86SampleClocks
(
OUT PULONGLONG pTSC,
OUT PULONGLONG pQPC
);
BOOLEAN EXTERNAL
HGM_x86CounterInit();
#define HGM_CPUCounterInit HGM_x86CounterInit
#else
/*
* For all other processors a value to cause the default timing to be used
*/
#define HGM_CPUCounterInit() FALSE
#endif /* _X86_ */
#endif /* __HIDGAME_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -