2016-10-10 6 views
-2

NtReadFileをフックして、ファイルから読み込まれたテキストを変更できるようにしたい。しかし、ファイルを読み込もうとすると、「このアプリケーションは、アプリケーション構成が正しくないため、起動できませんでした」というメッセージが表示されます。フックNtReadFile。テキストを変更する

ここに私のコードです。どうしましたか?

NTSTATUS HookNtReadFile (
    IN HANDLE FileHandle, 
    IN HANDLE Event, 
    IN PIO_APC_ROUTINE ApcRoutine, 
    IN PVOID ApcContext, 
    OUT PIO_STATUS_BLOCK IoStatusBlock, 
    OUT PVOID Buffer, 
    IN ULONG Length, 
    IN PLARGE_INTEGER ByteOffset, 
    IN PULONG Key) 
{ 
    NTSTATUS retstatus; 

    retstatus = glRealNtReadFile (FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, ByteOffset, Key); 

    IoStatusBlock->Information = 3; 
    Length = 3; 
    Buffer = ExAllocatePool(PagedPool, Length); 
    Buffer = "hi"; 

    return retstatus; 
} 
+0

エラーメッセージの[steps](https://support.microsoft.com/en-us/kb/948854)を試しましたか? –

+0

なぜこれをやろうとしていますか? – andlabs

+0

@andlabsそれはuniの私の割り当ての一つです。私は別のフック(NtCreateFile、NtOpenFile ...)をしましたが、NtReadFileではいくつか問題があります。 –

答えて

1

これは明らかに仕事に行くのではありません:あなたは、すぐにそのアドレスを破棄し、メモリを割り当てている

Buffer = ExAllocatePool(PagedPool, Length); 
Buffer = "hi"; 

。これは、Cで文字列をコピーする方法ではありません。strcpy、またはより安全な代替手段の1つを使用する必要があります。

ネイティブAPIがASCII文字を使用していないことも指摘しておきましょう。一般的に、すべての文字列はワイド文字列であると予想されます。

最後に、ファイルハンドルが変更しようとしている特定のファイルに関連付けられている場合、戻りコードが成功を示した場合にのみ値を変更する必要があります(コメント内で他の人が指摘したように)。

関連する問題