summaryrefslogtreecommitdiff
path: root/FddNotify/PTInstaller/PT-Installer.c
blob: 401033102e7a124fa0cccb9bc6518c5084755b3e (plain)
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;
}