2016-10-10 9 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 또는 더 안전한 대안 중 하나를 사용해야합니다.

네이티브 API가 ASCII 문자를 사용하지 않는다는 점도 지적 할 가치가 있습니다. 일반적으로 모든 문자열은 넓은 문자열이어야합니다.

마지막으로 반환 코드가 성공을 나타내면 파일 핸들이 변경하려고하는 특정 파일과 관련되어있을 때만 값을 변경해야합니다 (주석에서 다른 사람이 지적한 것처럼).