제목이 맞는지 확실하지 않지만 문제가 있다고 생각합니다. I는이 코드 부분을 가지고포인터 연산
FILE_DIRECTORY_INFORMATION *Buffer;
Buffer = ExAllocatePoolWithTag (NonPagedPool, 4096, 'arK');
..<fill in data into the buffer>..
//Values here are: Buffer:0x81490000; NextEntryOffset:0x48
Buffer += Buffer->NextEntryOffset;
//Values here are: Buffer:0x81491440; NextEntryOffset:0x0
문제 대신 간단한 추가로, 마지막 코드 라인은 승산을 수행한다는 것이다. 새로운 버퍼 값은 적어도 81490048이되어야하지만 81491440 (81490000 + 48 * 48)이어야합니다. 아무도 그 이유를 설명 할 수 있습니까?
추신 : 나는 모든 값을 체크했다. VS11을 사용하여 컴파일하면 마지막 코드 행이 실제로 imul 명령으로 변환됩니다.
그래서 기본적으로 숫자로만 처리하면됩니다. char *로 변환하는 것은 트릭을 만들었습니다 (원래 BYTE가 필요했지만 헤더에 정의되지 않았습니다). 드라이버가 현재 잘 작동하고 있습니다. 사용자 모드 응용 프로그램을 작성할 때 찾지 못했습니다. 감사합니다. – Kra