All pastes #924273 Raw Edit

Stuff

public text v1 · immutable
·published 2008-03-01 05:16 UTC
rendered paste body
/*int _tmain(int argc, _TCHAR* argv[])
{
	if(argc < 1)
		return 1;
	bool res;
	HKEY Services, myService;
	PWSTR thefeed;
	BYTE *result = (BYTE*)malloc(50);
	BYTE *resulta = (BYTE*)malloc(50);
	wchar_t resd[50];
	memset(&resd, 0, sizeof(resd));
	DWORD buffer;
	MessageBoxW(NULL, L"Testing", L"Test", MB_OK);
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Services", 0, 0, &Services) != ERROR_SUCCESS)
		return 1;
	if(RegOpenKeyEx(Services, argv[1], 0, 0, &myService) != ERROR_SUCCESS)
		return 1;
	RegQueryValueEx(myService, L"Prefix", NULL, NULL, result, &buffer);
	wcsncpy(resd, (wchar_t*)result, 20);
	wcscpy(thefeed, resd);
	RegQueryValueEx(myService, L"Index", NULL, NULL, resulta, &buffer);
	*resulta = *resulta | 0x30;
	wcscat(thefeed, (wchar_t*)resulta);
	wcscat(thefeed, L":");
	HANDLE hnd = GetServiceHandle(thefeed, 0, 0);
	if(hnd == INVALID_HANDLE_VALUE)
		ActivateService(argv[1], 0);
	else
		res = DeregisterService(hnd);
	if(res == true)
		return 0;
	return 1;
}*/
#define	INITIALBUFFER	2048
#define INCREMENTS		1024
int _tmain(int argc, _TCHAR* argv[])
{
	if(argc < 1)
		return 1;
	bool res;
	HKEY Services, myService;
	LPBYTE prefix = (LPBYTE) malloc(INITIALBUFFER);
	LPBYTE index  = (LPBYTE) malloc(INITIALBUFFER);
	LPWSTR Device, devBuf;

	DWORD buffer, dwRet, cbData, devlen;
	buffer = INITIALBUFFER;

	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Services", 0, 0, &Services) != ERROR_SUCCESS)
		return 1;
	if(RegOpenKeyEx(Services, argv[1], 0, 0, &myService) != ERROR_SUCCESS)
		return 1;

	dwRet = RegQueryValueEx(myService, L"Prefix", NULL, NULL, prefix, &cbData);
	while(dwRet == ERROR_MORE_DATA)
	{
		buffer += INCREMENTS;
		prefix = (LPBYTE) realloc(prefix, buffer);
		cbData = buffer;
		dwRet = RegQueryValueEx(myService, L"Prefix", NULL, NULL, prefix, &cbData);
	}
	buffer = INITIALBUFFER;
	//wcsncpy(resd, (wchar_t*)result, 20);
	//wcscpy(thefeed, resd);
	dwRet = RegQueryValueEx(myService, L"Index", NULL, NULL, index, &buffer);
	while(dwRet == ERROR_MORE_DATA)
	{
		buffer += INCREMENTS;
		index = (LPBYTE) realloc(index, buffer);
		cbData = buffer;
		dwRet = RegQueryValueEx(myService, L"Prefix", NULL, NULL, index, &cbData);
	}

	devlen = wcslen((LPWSTR)prefix);
	devBuf = (LPWSTR) malloc(sizeof(*index));
	_stprintf(devBuf, L"%d", *index);
	devlen += wcslen(devBuf);
	free(index);

	Device = (LPWSTR) malloc(devlen*2);
	wcsncpy(Device, (LPWSTR)prefix, 10);
	wcsncat(Device, devBuf, 3);
	wcscat(Device, L":");

	HANDLE hnd = GetServiceHandle(Device, 0, 0);
	if(hnd == INVALID_HANDLE_VALUE)
		ActivateService(argv[1], 0);
	else
		res = DeregisterService(hnd);
	free(Device);
	free(devBuf);
	free(prefix);
	free(index);
	if(res == true)
		return 0;
	return 1;
}