我有一個編譯爲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