1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <windows.h>
#include <stdio.h>
#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;
}
|