0

ユーザーの書き込みを分析する複雑なプログラムを書いていますが、このアプリケーションを 64 ビット OS で実行すると問題が発生します。問題を再解釈するために実行できるコードを次に示します。 http://thetechnofreak.com/technofreak/keylogger-visual-c/ ただし、プログラムは 32 ビット OS でも正しく動作するため、もちろん 64 ビット OS が必要です。

この電話の後

pKbd = pKbdLayerDescriptor();

このポインタはNULLに等しい

pKbd->pVkToWcharTable

最初に解決策をグーグルで検索しようとしましたが、これは http://www.codeproject.com/Questions/211107/RegQueryValueEx-programcrash-on-64-Bit とまったく同じ問題であることがわかりましたが、そうではないようです解決策になります。何が間違っている可能性があるのでしょうか?

プログラムにはこのコードがあり、32 ビット アーキテクチャと 64 ビット アーキテクチャのポインタのサイズの違いを処理しているようです。

#if defined(BUILD_WOW6432)
#define KBD_LONG_POINTER __ptr64
#else
#define KBD_LONG_POINTER
#endif

しかし、明らかに、それは役に立ちません。

4

1 に答える 1

1

そのコードでまったく同じ問題が発生しました。

32 ビットにコンパイルしているが、私と同じように 64 ビットで実行していると仮定します。もしそうなら、最初BUILD_WOW6432に含める前に定義する必要がありますkbd.h(またはkbdext.hそれを使用している場合)。第二に、使用

SHGetFolderPath(NULL, CSIDL_SYSTEMX86, NULL, 0, systemDirectory)

の代わりにGetSystemDirectory(systemDirectory, MAX_PATH)。これは、64 ビット マシンでも、常に 32 ビット コードを使用することを意味します。

これで問題は解決しました。お役に立てば幸いです:)

于 2012-07-20T10:50:49.620 に答える