最近在研究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的最高位为符号位。