AtlGetCommCtrlVersion 和 AtlGetShellVersion
2017-10-07 13:51
369 查看
/////////////////////////////////////////////////////////////////////////////
// General DLL Version Helpers
#pragma warning(push)
#pragma warning(disable : 4191) // 'type cast' : unsafe conversion from 'FARPROC' to 'DLLGETVERSIONPROC'
inline HRESULT AtlGetDllVersion(
_In_ HINSTANCE hInstDLL,
_Out_ DLLVERSIONINFO* pDllVersionInfo)
{
ATLENSURE(pDllVersionInfo != NULL);
// We must get this function explicitly because some DLLs don't implement it.
DLLGETVERSIONPROC pfnDllGetVersion = (DLLGETVERSIONPROC)::GetProcAddress(hInstDLL, "DllGetVersion");
if(pfnDllGetVersion == NULL)
{
return E_NOTIMPL;
}
return (*pfnDllGetVersion)(pDllVersionInfo);
}
#pragma warning(pop)
inline HRESULT AtlGetDllVersion(
_In_z_ LPCTSTR lpstrDllName,
_Out_ DLLVERSIONINFO* pDllVersionInfo)
{
HINSTANCE hInstDLL = ::LoadLibrary(lpstrDllName);
if(hInstDLL == NULL)
{
return AtlHresultFromLastError();
}
HRESULT hRet = AtlGetDllVersion(hInstDLL, pDllVersionInfo);
::FreeLibrary(hInstDLL);
return hRet;
}
// Common Control Versions:
// WinNT 4.0 maj=4 min=00
// IE 3.x maj=4 min=70
// IE 4.0 maj=4 min=71
// IE 5.0 maj=5 min=80
// Win2000 maj=5 min=81
inline HRESULT AtlGetCommCtrlVersion(
_Out_ LPDWORD pdwMajor,
_Out_ LPDWORD pdwMinor)
{
ATLENSURE(( pdwMajor != NULL ) && ( pdwMinor != NULL ));
DLLVERSIONINFO dvi;
memset(&dvi, 0, sizeof(dvi));
dvi.cbSize = sizeof(dvi);
HRESULT hRet = AtlGetDllVersion(_T("comctl32.dll"), &dvi);
if(SUCCEEDED(hRet))
{
*pdwMajor = dvi.dwMajorVersion;
*pdwMinor = dvi.dwMinorVersion;
}
return hRet;
}
// Shell Versions:
// WinNT 4.0 maj=4 min=00
// IE 3.x, IE 4.0 without Web Integrated Desktop maj=4 min=00
// IE 4.0 with Web Integrated Desktop maj=4 min=71
// IE 4.01 with Web Integrated Desktop maj=4 min=72
// Win2000 maj=5 min=00
inline HRESULT AtlGetShellVersion(
_Out_ LPDWORD pdwMajor,
_Out_ LPDWORD pdwMinor)
{
ATLENSURE(( pdwMajor != NULL) && ( pdwMinor != NULL ));
DLLVERSIONINFO dvi;
memset(&dvi, 0, sizeof(dvi));
dvi.cbSize = sizeof(dvi);
HRESULT hRet = AtlGetDllVersion(_T("shell32.dll"), &dvi);
if(SUCCEEDED(hRet))
{
*pdwMajor = dvi.dwMajorVersion;
*pdwMinor = dvi.dwMinorVersion;
}
return hRet;
}
=================================================================
HRESULT AtlGetDllVersion(HINSTANCE hInstDLL, DLLVERSIONINFO* pDllVersionInfo)
HRESULT AtlGetDllVersion(LPCTSTR lpstrDllName, DLLVERSIONINFO* pDllVersionInfo)
这两个函数到给定的模块中寻找名为 DllGetVersion() 的导出函数,如果找到了,就调用之。如果 DllGetVersion() 调用成功,它把版本信息返回到 DLLVERSIONINFO结构里。
HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) 返回 comctl32.dll 的主版本和次版本。
HRESULT AtlGetShellVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) 返回 shell32.dll 的主版本和次版本。
// General DLL Version Helpers
#pragma warning(push)
#pragma warning(disable : 4191) // 'type cast' : unsafe conversion from 'FARPROC' to 'DLLGETVERSIONPROC'
inline HRESULT AtlGetDllVersion(
_In_ HINSTANCE hInstDLL,
_Out_ DLLVERSIONINFO* pDllVersionInfo)
{
ATLENSURE(pDllVersionInfo != NULL);
// We must get this function explicitly because some DLLs don't implement it.
DLLGETVERSIONPROC pfnDllGetVersion = (DLLGETVERSIONPROC)::GetProcAddress(hInstDLL, "DllGetVersion");
if(pfnDllGetVersion == NULL)
{
return E_NOTIMPL;
}
return (*pfnDllGetVersion)(pDllVersionInfo);
}
#pragma warning(pop)
inline HRESULT AtlGetDllVersion(
_In_z_ LPCTSTR lpstrDllName,
_Out_ DLLVERSIONINFO* pDllVersionInfo)
{
HINSTANCE hInstDLL = ::LoadLibrary(lpstrDllName);
if(hInstDLL == NULL)
{
return AtlHresultFromLastError();
}
HRESULT hRet = AtlGetDllVersion(hInstDLL, pDllVersionInfo);
::FreeLibrary(hInstDLL);
return hRet;
}
// Common Control Versions:
// WinNT 4.0 maj=4 min=00
// IE 3.x maj=4 min=70
// IE 4.0 maj=4 min=71
// IE 5.0 maj=5 min=80
// Win2000 maj=5 min=81
inline HRESULT AtlGetCommCtrlVersion(
_Out_ LPDWORD pdwMajor,
_Out_ LPDWORD pdwMinor)
{
ATLENSURE(( pdwMajor != NULL ) && ( pdwMinor != NULL ));
DLLVERSIONINFO dvi;
memset(&dvi, 0, sizeof(dvi));
dvi.cbSize = sizeof(dvi);
HRESULT hRet = AtlGetDllVersion(_T("comctl32.dll"), &dvi);
if(SUCCEEDED(hRet))
{
*pdwMajor = dvi.dwMajorVersion;
*pdwMinor = dvi.dwMinorVersion;
}
return hRet;
}
// Shell Versions:
// WinNT 4.0 maj=4 min=00
// IE 3.x, IE 4.0 without Web Integrated Desktop maj=4 min=00
// IE 4.0 with Web Integrated Desktop maj=4 min=71
// IE 4.01 with Web Integrated Desktop maj=4 min=72
// Win2000 maj=5 min=00
inline HRESULT AtlGetShellVersion(
_Out_ LPDWORD pdwMajor,
_Out_ LPDWORD pdwMinor)
{
ATLENSURE(( pdwMajor != NULL) && ( pdwMinor != NULL ));
DLLVERSIONINFO dvi;
memset(&dvi, 0, sizeof(dvi));
dvi.cbSize = sizeof(dvi);
HRESULT hRet = AtlGetDllVersion(_T("shell32.dll"), &dvi);
if(SUCCEEDED(hRet))
{
*pdwMajor = dvi.dwMajorVersion;
*pdwMinor = dvi.dwMinorVersion;
}
return hRet;
}
=================================================================
HRESULT AtlGetDllVersion(HINSTANCE hInstDLL, DLLVERSIONINFO* pDllVersionInfo)
HRESULT AtlGetDllVersion(LPCTSTR lpstrDllName, DLLVERSIONINFO* pDllVersionInfo)
这两个函数到给定的模块中寻找名为 DllGetVersion() 的导出函数,如果找到了,就调用之。如果 DllGetVersion() 调用成功,它把版本信息返回到 DLLVERSIONINFO结构里。
HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) 返回 comctl32.dll 的主版本和次版本。
HRESULT AtlGetShellVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) 返回 shell32.dll 的主版本和次版本。
相关文章推荐
- error LNK2019: unresolved external symbol "unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6G
- get bash shell with python fabric
- Ex2010-06 Get version number, build number
- Drupal 7.31SQL注入getshell漏洞利用详解及EXP
- how to get hive version
- vs2013error C4996: 'GetVersionExW': 被声明为已否决
- 获取Exe文件版本信息的函数(使用GetFileVersionInfo得到TFileVersionInfo结构体,包含12项内容)
- Could not get unknown property 'ANDROID_BUILD_SDK_VERSION'
- DEDEcms GET shell 再次通杀 所有版本
- eWebEditor getwebshell
- Jboss remote getshell (JMXInvokerServlet) vc版
- GetFileVersionString
- Visual Studio 2008 SDK Version 和Microsoft Visual Studio 2008 Shell发布了
- Fetch failed: unable to access': E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
- error C4996: ‘GetVersionExW': 被声明为已否决
- GetFileVersion
- 安装SharePoint2010出现“Failed to call GetTypes on assembly Microsoft.Office.Server.Search, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce”的解决方法
- 正确使用DllGetVersion
- error LNK2001: unresolved external symbol _GetFileVersionInfoA@16
- GetVersion和GetVersionEx函数详解