From 27d1e03d7bdf8fcfe7292c06e40bc3e2fca9158e Mon Sep 17 00:00:00 2001 From: Denis Oliver Kropp Date: Tue, 19 Oct 2010 15:56:15 +0200 Subject: pluggit --- src/videodrivercheck.cpp | 154 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 src/videodrivercheck.cpp (limited to 'src/videodrivercheck.cpp') diff --git a/src/videodrivercheck.cpp b/src/videodrivercheck.cpp new file mode 100644 index 0000000..93a407f --- /dev/null +++ b/src/videodrivercheck.cpp @@ -0,0 +1,154 @@ +#include +#include +//#include "vncOSVersion.h" + +typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD); + +/*bool CheckDriver2(void) +{ + SC_HANDLE schMaster; + SC_HANDLE schSlave; + + schMaster = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS); + + schSlave = OpenService (schMaster, "vnccom", SERVICE_ALL_ACCESS); + + if (schSlave == NULL) + { + CloseServiceHandle(schMaster); + return false; + } + else + { + CloseServiceHandle (schSlave); + CloseServiceHandle(schMaster); + return true; + } +}*/ + + +/////////////////////////////////////////////////////////////////// +BOOL GetDllProductVersion(char* dllName, char *vBuffer, int size) +{ + char *versionInfo; + void *lpBuffer; + unsigned int cBytes; + DWORD rBuffer; + + if( !dllName || !vBuffer ) + return(FALSE); + +// DWORD sName = GetModuleFileName(NULL, fileName, sizeof(fileName)); +// FYI only + DWORD sVersion = GetFileVersionInfoSize(dllName, &rBuffer); + if (sVersion==0) return (FALSE); + versionInfo = new char[sVersion]; + + BOOL resultVersion = GetFileVersionInfo(dllName, + NULL, + sVersion, + versionInfo); + + BOOL resultValue = VerQueryValue(versionInfo, + +TEXT("\\StringFileInfo\\040904b0\\ProductVersion"), + &lpBuffer, + &cBytes); + + if( !resultValue ) + { + resultValue = VerQueryValue(versionInfo,TEXT("\\StringFileInfo\\000004b0\\ProductVersion"), + &lpBuffer, + &cBytes); + + } + + if( resultValue ) + { + strncpy(vBuffer, (char *) lpBuffer, size); + delete versionInfo; + return(TRUE); + } + else + { + *vBuffer = '\0'; + delete versionInfo; + return(FALSE); + } +} + +/////////////////////////////////////////////////////////////////// + +bool +CheckVideoDriver(bool Box) +{ + typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD); + HDC m_hrootdc=NULL; + pEnumDisplayDevices pd; + static const char* driverName = "mv video hook driver2"; + BOOL DriverFound; + DEVMODE devmode; + FillMemory(&devmode, sizeof(DEVMODE), 0); + devmode.dmSize = sizeof(DEVMODE); + devmode.dmDriverExtra = 0; + BOOL change = EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&devmode); + devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; + HMODULE hUser32=LoadLibrary("USER32"); + pd = (pEnumDisplayDevices)GetProcAddress( hUser32, "EnumDisplayDevicesA"); + if (pd) + { + LPSTR deviceName=NULL; + DISPLAY_DEVICE dd; + ZeroMemory(&dd, sizeof(dd)); + dd.cb = sizeof(dd); + devmode.dmDeviceName[0] = '\0'; + INT devNum = 0; + BOOL result; + DriverFound=false; + while (result = (*pd)(NULL,devNum, &dd,0)) + { + if (strcmp((const char *)&dd.DeviceString[0], driverName) == 0) + { + DriverFound=true; + break; + } + devNum++; + } + if (DriverFound) + { + if (hUser32) FreeLibrary(hUser32); + if(Box) + { + char buf[512]; + GetDllProductVersion((char*)"mv2.dll",buf,512); + if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) + { + strcat(buf," driver Active"); + HDC testdc=NULL; + deviceName = (LPSTR)&dd.DeviceName[0]; + testdc = CreateDC("DISPLAY",deviceName,NULL,NULL); + if (testdc) + { + DeleteDC(testdc); + strcat(buf," access ok"); + } + else + { + strcat(buf," access denied, permission problem"); + } + } + else + strcat(buf," driver Not Active"); + + MessageBox(NULL,buf,"driver info: required version 1.22",0); + } + return true; + //deviceName = (LPSTR)&dd.DeviceName[0]; + //m_hrootdc = CreateDC("DISPLAY",deviceName,NULL,NULL); + //if (m_hrootdc) DeleteDC(m_hrootdc); + } + else if(Box) MessageBox(NULL,"Driver not found: Perhaps you need to reboot after install","driver info: required version 1.22",0); + } + if (hUser32) FreeLibrary(hUser32); + return false; +} -- cgit