프레임 버퍼에 데이터를 직접 쓸 수있는 드라이버를 작성 중이므로 사용자 공간의 응용 프로그램이 화면에 표시되지 않도록 할 수 있습니다 그것. 아래 코드는 프레임 버퍼에 값을 쓰려고하지만 프레임 버퍼에서 값을 쓰면 프레임 버퍼에서 가져온 값은 모두 0입니다.Windows 드라이버에서 프레임 버퍼에 직접 쓰는 방법
나는 그 이유를 알지 못합니다. ? 또는 사용자 공간의 응용 프로그램이 메시지의 내용을 가져올 수없는 동안 누구나 화면에 메시지를 표시하는 방법을 알고 있습니까? 고마워요!
#define FRAME_BUFFER_PHYSICAL_ADDRESS 0xA0000
#define BUFFER_SIZE 0x20000
void showMessage()
{
int i;
int *vAddr;
PHYSICAL_ADDRESS pAddr;
pAddr.QuadPart = FRAME_BUFFER_PHYSICAL_ADDRESS;
vAddr = (int *)MmMapIoSpace(pAddr, BUFFER_SIZE, MmNonCached);
KdPrint(("Virtual address is %p", vAddr));
for(i = 0; i < BUFFER_SIZE/4; i++)
{
vAddr[i] = 0x11223344;
}
for(i = 0; i < 0x80; i++)
{
KdPrint(("Value: %d", vAddr[i])); // output are all zero
}
MmUnmapIoSpace(vAddr, BUFFER_SIZE);
}