[an error occurred while processing this directive]
|
Функции AWE, на самом деле не понятно насколько они нужны в данном случае, но вроде как физическая non-paged память выделяется...
if( !OpenProcessToken( GetCurrentProcess()
, TOKEN_ADJUST_PRIVILEGES
, &tokenHandle ) )
...
tokenPrivileges.PrivilegeCount = 1;
LookupPrivilegeValue( NULL, SE_LOCK_MEMORY_NAME, &tokenPrivileges.Privileges[0].Luid );
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if( !AdjustTokenPrivileges( tokenHandle
, FALSE
, &tokenPrivileges
, NULL, NULL, NULL ) )
...
kernelDllHandle = LoadLibrary( "kernel32.dll" );
if( kernelDllHandle == NULL )
...
MapUserPhysicalPages = (TMapUserPhysicalPages)GetProcAddress( kernelDllHandle, "MapUserPhysicalPages" );
if( !MapUserPhysicalPages )
...
AllocateUserPhysicalPages = (TAllocateUserPhysicalPages)GetProcAddress( kernelDllHandle, "AllocateUserPhysicalPages" );
...
if( !AllocateUserPhysicalPages( GetCurrentProcess(), &numOfPages, physAddr ) )
...
if( numOfPages != reqNumOfPages )
...
dmaBuffer = VirtualAlloc( NULL, memorySize, MEM_PHYSICAL | MEM_RESERVE, PAGE_READWRITE );
if( !dmaBuffer )
...
if( !MapUserPhysicalPages( dmaBuffer, numOfPages, physAddr ) )
...
driver = CreateFile( driverFileName, GENERIC_READ | GENERIC_WRITE
, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if( driver == INVALID_HANDLE_VALUE )
...
while( 1 )
{
nBytes = DATA_BUF+DATA_DIGIT;
if( !ReadFile( driver, dmaBuffer, nBytes, &nBytes, NULL ) )
...
}
Или просто какова схема работы?
И еще, вызвать ExAllocatePool вместо AllocateUserPhysicalMemory в программе не удалось, падает без объяснений...
E-mail: info@telesys.ru