最近在研究Windows驱动程序开发,遇到这样一个语句:
devExt->PortBase = (PUCHAR)(ULONG_PTR) portBasePA.QuadPart;
在源代码环境中,代表如果不需要地址映射,就把基址直接付给设备的端口基址。
查看了QuadPart的定义,portBasePA是一个LARGE_INTEGER类型。
typedef union _LARGE_INTEGER {
struct { ULONG LowPart; LONG HighPart; } DUMMYSTRUCTNAME; struct { ULONG LowPart; LONG HighPart; } u;#endif //MIDL_PASS LONGLONG QuadPart;} LARGE_INTEGER;LARGE_INTEGER是union;用于表示一64位有符号整数值;如果编译器直接支持64位整数可以直接使用QuadPart(64位),否则分别对LowPart(32位)和HighPart(32位)存取,HighPart的最高位为符号位。