2011年12月27日 星期二

Using C RTL in Windows Driver


某一天在寫驅動程式時, 需要取字串, 比對字串, 及 parse 16進位字串, 沒想太多, 就用了 C 的 run-time library 中的 strlen(), strnicmp() 及 sscanf_s(), 也編出了 32/64-bit 的 WinXP 及 Win7 版本, 接著自己在 Win7 上測試都也都沒問題.

結果隔天測試人員就回報 "在 WinXP 下有問題", 於是帶著 debug 版 driver 親自到測試機台上看, WT...竟然也看不到任何 message (...真是見鬼了!), 我就想該不會是用了幾個 run-time library 的關係吧!? 於是一個一個拿掉試試, 發現竟然是 sscanf_s() 造成驅動程式在 WinXP 下沒辦法載入.

原因到現在還是個謎, 不過解決辦法就是改用 RtlXXX 這類的 API 了.

沒有留言:

張貼留言