本人新手,最近在研究HidGame的源码,有些地方难理解,求大神指教,谢谢!
1.#define A B (0x100) 是否直接把A文本替换为B (0x100)?
2.为什么有时候#if或者#ifdef后面的字体是灰色的(VS2008)?不会影响正常编译运行吧?
3.#define A (0x1000|0x0100|0x0001) 是否等同于 #define A 0x1101 ?
4.#define C_ASSERT(e) switch(0) case(e): case(0):
switch(0) case(e): case(0): 不懂这个用法。
5.IN OUT PDE DE; 此处IN OUT不懂,想查看定义,编译器却提示没有定义。知道是数据交互,但不知道数据源在哪。
6.typedef ULONG (*PHIDGAME_READPORT) (PVOID GameContext);
是把什么替换成什么?
7.这个复杂点,我不懂AnalogDevice里的数据是如何传递到DeviceExtension里的,求详解。
DeviceExtension = GET_MINIDRIVER_DEVICE_EXTENSION (DeviceObject);
#define GET_MINIDRIVER_DEVICE_EXTENSION(DO) \
((PDEVICE_EXTENSION) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension))
typedef struct _HID_DEVICE_EXTENSION {
PDEVICE_OBJECT PhysicalDeviceObject;
PDEVICE_OBJECT NextDeviceObject;
PVOID MiniDeviceExtension;
} HID_DEVICE_EXTENSION, *PHID_DEVICE_EXTENSION;
typedef struct _ANALOG_DEVICE{
USHORT nAxes;
USHORT nButtons;
HIDGAME_OEM_DATA HidGameOemData;
ULONG ScaledTimeout;
ULONG ScaledThreshold;
ULONG LastGoodAxis[4];
UCHAR LastGoodButton[4];
int AxisMap[MAX_AXES];
int povMap;
ULONG button5limit;
ULONG button6limit;
UCHAR resistiveInputMask;
BOOLEAN fSiblingFound;
} ANALOG_DEVICE, *PANALOG_DEVICE;
typedef struct _DEVICE_EXTENSION{
PGAMEENUM_READPORT ReadAccessor;
PGAMEENUM_WRITEPORT WriteAccessor;
PGAMEENUM_READPORT_DIGITAL ReadAccessorDigital;
PGAMEENUM_ACQUIRE_PORT AcquirePort;
PGAMEENUM_RELEASE_PORT ReleasePort;
PVOID GameContext;
PVOID PortContext;
LIST_ENTRY Link;
KEVENT RemoveEvent;
LONG RequestCount;
#ifdef CHANGE_DEVICE
PDEVICE_OBJECT NextDeviceObject;
#endif /* CHANGE_DEVICE */
ANALOG_DEVICE;
BOOLEAN fRemoved;
BOOLEAN fStarted;
BOOLEAN fSurpriseRemoved;
#ifdef CHANGE_DEVICE
BOOLEAN fReplaced;
#endif /* CHANGE_DEVICE */
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
8.NTSTATUS EXTERNAL
DriverEntry
(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
...
}
DriverObject和RegistryPath的值是如何获取的?inf和rc文件里有没有什么配置会影响这两个参数?
因为我想开发个虚拟的摇杆,所以这方面想搞清楚点。
9.最后一个:我看到过一个软件可以实现虚拟摇杆功能的,他的驱动inf文件里,
[Vendor]
;Device Name Install Section PnP ID
%JoystickBus%= JoyBus.Inst, root\PPJoyBus
没有VID PID的信息,请问这个root\PPJoyBus是什么的路径?
不管帮到我没有,感谢关注过这个帖子的所有人!
------解决方案--------------------
很欣赏lz的毅力,我就很没毅力呵呵。。。
搞嵌入式其实还是要学c语言,c和c++完全是两个语言。。。。
尽量的利用黑盒原理,也就是直接看文档调用api,不要直接上源码,那样的话热情和毅力会被耗光。。。。。
基础,还是基础。。。。。
祝lz成功。
------解决方案--------------------
这些问题昨天熬夜已经自己弄懂了。谢谢楼上的关注,结贴给分了。