|
|
#include "precomp.h"
#define COUNTOF(x) (sizeof x/sizeof *x)
DWORD DllRegisterServer( ) { DWORD dwError = 0; HKEY hRegistryKey = NULL; HKEY hOakleyKey = NULL; DWORD dwDisposition = 0; DWORD dwTypesSupported = 7; HKEY hPolicyLocationKey = NULL; HANDLE hPolicyStore = NULL;
dwError = RegOpenKeyExW( HKEY_LOCAL_MACHINE, (LPCWSTR) L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application", 0, KEY_ALL_ACCESS, &hRegistryKey ); BAIL_ON_WIN32_ERROR(dwError);
dwError = RegCreateKeyExW( hRegistryKey, L"Oakley", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hOakleyKey, &dwDisposition ); BAIL_ON_WIN32_ERROR(dwError);
dwError = RegSetValueExW( hOakleyKey, L"EventMessageFile", 0, REG_SZ, (LPBYTE) L"%SystemRoot%\\System32\\oakley.dll", (wcslen(L"%SystemRoot%\\System32\\oakley.dll") + 1)*sizeof(WCHAR) ); BAIL_ON_WIN32_ERROR(dwError);
dwError = RegSetValueExW( hOakleyKey, L"TypesSupported", 0, REG_DWORD, (LPBYTE) &dwTypesSupported, sizeof(DWORD) ); BAIL_ON_WIN32_ERROR(dwError);
if (IsCleanInstall()) {
dwError = RegCreateKeyExW( HKEY_LOCAL_MACHINE, L"SOFTWARE\\Policies\\Microsoft\\Windows\\IPSec\\Policy\\Local", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hPolicyLocationKey, &dwDisposition ); BAIL_ON_WIN32_ERROR(dwError);
dwError = IPSecOpenPolicyStore( NULL, IPSEC_REGISTRY_PROVIDER, NULL, &hPolicyStore ); BAIL_ON_WIN32_ERROR(dwError);
dwError = GenerateDefaultInformation( hPolicyStore ); BAIL_ON_WIN32_ERROR(dwError);
}
error:
if (hPolicyStore) { (VOID) IPSecClosePolicyStore( hPolicyStore ); }
if (hPolicyLocationKey) { RegCloseKey(hPolicyLocationKey); }
if (hOakleyKey) { RegCloseKey(hOakleyKey); }
if (hRegistryKey) { RegCloseKey(hRegistryKey); }
return (dwError); }
DWORD DllUnregisterServer( ) { return (ERROR_SUCCESS); }
BOOL IsCleanInstall( ) { BOOL bStatus = FALSE;
bStatus = LocalIpsecInfoExists( HKEY_LOCAL_MACHINE, L"SOFTWARE\\Policies\\Microsoft\\Windows\\IPSec\\Policy\\Local" );
return (!bStatus); }
BOOL LocalIpsecInfoExists( HKEY hSourceParentKey, LPWSTR pszSourceKey ) { DWORD dwError = 0; HKEY hSourceKey = NULL; BOOL bStatus = FALSE; WCHAR lpszName[MAX_PATH]; DWORD dwSize = 0; DWORD dwCount = 0;
dwError = RegOpenKeyExW( hSourceParentKey, pszSourceKey, 0, KEY_ALL_ACCESS, &hSourceKey ); if (dwError != ERROR_SUCCESS) { return (bStatus); }
memset(lpszName, 0, sizeof(WCHAR)*MAX_PATH); dwSize = COUNTOF(lpszName);
if ((RegEnumKeyExW( hSourceKey, dwCount, lpszName, &dwSize, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS) { bStatus = TRUE; } else { bStatus = FALSE; }
RegCloseKey(hSourceKey); return (bStatus); }
|