当前位置: 代码迷 >> 驱动开发 >> HidGame里关于#define typedef IN OUT的有关问题
  详细解决方案

HidGame里关于#define typedef IN OUT的有关问题

热度:290   发布时间:2016-04-28 11:21:08.0
HidGame里关于#define typedef IN OUT的问题
本人新手,最近在研究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成功。
------解决方案--------------------
这些问题昨天熬夜已经自己弄懂了。谢谢楼上的关注,结贴给分了。
  相关解决方案