我有一个编译为x86(32位)的C++程序。它正在调用内核模式驱动程序。驱动程序编译为操作系统的字大小都在运行。目标操作系统可能是32位或64位(在我的情况下是windows)。如何用C++在运行时确定操作系统的字长?
我的问题是确定由驱动程序返回的指针的大小,因为它是OS调用所需要的。
用户模式程序下面的调用工作如果系统有32位字长:
HANDLE device = OpenDevice();
HANDLE packageReceivedEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
bool result = DeviceIoControl(
device,
IOCTL_CODE,
&packageReceivedEvent, //for signaling
sizeof(HANDLE), //TODO does not work for 64 bit
nullptr,
0,
&recvBytes,
nullptr);
的定义来自标准WINBASE.H和WINNT.H。
我不能使用像sizeof(int)
这样的编译时解决方案,因为它们只考虑用户模式程序,而不是它依赖的驱动程序编译。
也许只需将DeviceIoControl
的nInBufferSize
简单地设置为最高期望的字大小就足够了,但有没有更好的解决方案?
你检查这实际上是一个问题?通常操作系统是聪明的,不需要大量的锅炉代码来使用指针,如果你是一个32位程序和一个有效的64位指针,只要给你一个有效的32位指针一个64位程序。 – nwp
在64位系统上使用64位版本的程序。这是默认的。在32位系统上使用32位版本的程序。那些现在很少见。 –
“32位编译器”是什么意思?编译器是生成可执行文件的可执行文件。由于Windows可执行文件可以是32位和64位,因此有4种理论组合,只有64位编译器生成64位可执行文件才明确地不是“32位编译器”。 – MSalters