Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************************************************************
Copyright (c) 2002 Microsoft Corporation
Module Name: safelib.cpp
Abstract: Implements LoadLibraryFromSystemDir function
******************************************************************************/
#include "stdafx.h"
// **************************************************************************
static BOOL UseFullPath(void) { static BOOL s_fUseFullPath = TRUE; static BOOL s_fInit = FALSE;
OSVERSIONINFO osvi;
if (s_fInit) return s_fUseFullPath;
ZeroMemory(&osvi, sizeof(osvi)); osvi.dwOSVersionInfoSize = sizeof(osvi);
if (GetVersionEx(&osvi)) { if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && (osvi.dwMajorVersion > 5 || (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion >= 1))) { s_fUseFullPath = FALSE; }
s_fInit = TRUE; }
return s_fUseFullPath; }
// **************************************************************************
HMODULE WINAPI LoadLibraryFromSystemDir(LPCTSTR szModule) { HRESULT hr = NOERROR; HMODULE hmod = NULL; TCHAR szModulePath[MAX_PATH + 1];
if (szModule == NULL) { SetLastError(ERROR_INVALID_PARAMETER); goto done; }
if (UseFullPath()) { DWORD cch;
// if the function call fails, make the buffer an empty string, so
// we will just use the dll name in the append below.
cch = GetSystemDirectory(szModulePath, ARRAYSIZE(szModulePath)); if (cch == 0 || cch >= ARRAYSIZE(szModulePath)) szModulePath[0] = _T('\0'); } else { szModulePath[0] = _T('\0'); }
hr = PathCchAppend(szModulePath, ARRAYSIZE(szModulePath), szModule); if (FAILED(hr)) { SetLastError(HRESULT_CODE(hr)); goto done; }
hmod = LoadLibraryEx(szModulePath, NULL, 0); if (hmod == NULL) goto done;
done: return hmod; }
|