#include #include #include "pt_ioctl.c" HANDLE hPortTalk; BOOL isWindowsNT(void) { OSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi))) { osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(!GetVersionEx((OSVERSIONINFO *)&osvi)) osvi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; } return osvi.dwPlatformId==VER_PLATFORM_WIN32_NT; } void AddKeysToRegistry(void) { HKEY hk; DWORD dwData; LPTSTR pszData = "PortTalk"; if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\PortTalk", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hk, NULL)) return; dwData = 1; RegSetValueEx(hk, "Type", 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)); dwData = 1; RegSetValueEx(hk, "ErrorControl", 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)); dwData = 2; RegSetValueEx(hk, "Start", 0, REG_DWORD, (LPBYTE)&dwData, sizeof(DWORD)); RegSetValueEx(hk, "DisplayName", 0, REG_EXPAND_SZ, (LPBYTE)pszData, (DWORD)lstrlen(pszData)+1); RegCloseKey(hk); } int main(void) { if (!isWindowsNT()) { printf("PortTalk cannot be installed on non-NT systems (as a matter of fact you won't need it) :)\n"); return 0; } if (OpenPortTalk()) return 1; ClosePortTalk(); AddKeysToRegistry(); printf("PortTalk succesful installation\n"); return 0; }