1
0
mirror of https://github.com/mpv-player/mpv synced 2025-02-02 21:21:33 +00:00

windows xp support

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12057 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
faust3 2004-03-23 10:34:24 +00:00
parent a977756617
commit 543c00752d
2 changed files with 57 additions and 3 deletions

View File

@ -5,6 +5,9 @@
*/
#include <windows.h>
#include <ddk/ntddk.h>
#include "../dhahelperwin/dhahelper.h"
/*
This is the request structure that applications use
to request services from the MAPDEV VxD.
@ -32,9 +35,20 @@ typedef struct _MapDevRequest
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType)<<16) | ((Access)<<14) | ((Function)<<2) | (Method) )
int IsWinNT(){
OSVERSIONINFO OSVersionInfo;
OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OSVersionInfo);
return OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;
}
static HANDLE hDriver = INVALID_HANDLE_VALUE;
/* Memory Map a piece of Real Memory */
void *map_phys_mem(unsigned long base, unsigned long size) {
if(!IsWinNT()){
HANDLE hDevice ;
PVOID inBuf[1] ; /* buffer for struct pointer to VxD */
DWORD RetInfo[2] ; /* buffer to receive data from VxD */
@ -63,6 +77,26 @@ void *map_phys_mem(unsigned long base, unsigned long size) {
fprintf(stderr, "Failed to map device\n") ; exit(1) ; }
return (void*)req.mdr_LinearAddress ;
}
else{
dhahelper_t dhahelper_priv;
DWORD dwBytesReturned;
dhahelper_priv.size = size;
dhahelper_priv.base = base;
if(hDriver==INVALID_HANDLE_VALUE)hDriver = CreateFile("\\\\.\\DHAHELPER",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (!DeviceIoControl(hDriver, IOCTL_DHAHELPER_MAPPHYSTOLIN, &dhahelper_priv,sizeof(dhahelper_t), &dhahelper_priv, sizeof(dhahelper_t),&dwBytesReturned, NULL)){
printf("unable to map thre requested memory region\n");
return NULL;
}
else return dhahelper_priv.ptr;
}
}
void unmap_phys_mem(void *ptr, unsigned long size) { }
void unmap_phys_mem(void *ptr, unsigned long size) {
if(IsWinNT()){
dhahelper_t dhahelper_priv;
DWORD dwBytesReturned;
dhahelper_priv.ptr = ptr;
DeviceIoControl(hDriver, IOCTL_DHAHELPER_UNMAPPHYSADDR, &dhahelper_priv,sizeof(dhahelper_t), NULL, 0, &dwBytesReturned, NULL);
}
}

View File

@ -4,15 +4,35 @@
Modified for readability by Nick Kurshev
*/
#include <windows.h>
#include <ddk/ntddk.h>
#include "../dhahelperwin/dhahelper.h"
static HANDLE hDriver;
extern int IsWinNT();
/* Nothing to do for Win9x. For WinNT I have no solution */
static __inline__ int enable_os_io(void)
{
if(IsWinNT()){
DWORD dwBytesReturned;
hDriver = CreateFile("\\\\.\\DHAHELPER",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(!DeviceIoControl(hDriver, IOCTL_DHAHELPER_ENABLEDIRECTIO, NULL,0, NULL, 0, &dwBytesReturned, NULL)){
printf("unable to enable directio please install dhahelper.sys\n");
return(1);
}
}
return(0);
}
static __inline__ int disable_os_io(void)
{
if(IsWinNT()){
DWORD dwBytesReturned;
DeviceIoControl(hDriver, IOCTL_DHAHELPER_DISABLEDIRECTIO, NULL,0, NULL, 0, &dwBytesReturned, NULL);
CloseHandle(hDriver);
}
return(0);
}