#include <windows.h>
#include <stdio.h>

//#define out stdout
FILE *out;


int osVersion() {
  OSVERSIONINFO osVer;
  osVer.dwOSVersionInfoSize = sizeof(osVer);

  GetVersionEx(&osVer);

  if (osVer.dwPlatformId == VER_PLATFORM_WIN32_NT)
    fputs("NT\n", out);
  else
    fputs("not NT\n", out);

  fprintf(out, "dwPlatformId   : %d\n", osVer.dwPlatformId);
  fprintf(out, "dwMajorVersion : %d\n", osVer.dwMajorVersion);
  fprintf(out, "dwMinorVersion : %d\n", osVer.dwMinorVersion);
  fprintf(out, "dwBuildNumber  : %d\n", osVer.dwBuildNumber);

  return 0;
}


int enumThem(LPCTSTR sub) {
  HKEY hKey;
  LONG r;
  LPTSTR val, dat;
  int idx = 0;
  DWORD vlen, dlen, type;

  val = (LPTSTR)malloc(512);
  dat = (LPTSTR)malloc(512);

  fprintf(out, "collecting data at [%s]\n", sub);

  r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sub, 0, KEY_ALL_ACCESS, &hKey);

  if (r != ERROR_SUCCESS) {
    fputs ("error: cant open key\n", out);
    return 0;
  }

  do{
    vlen = 256;
    dlen = 256;
    r = RegEnumValue(hKey, idx, val, &vlen, NULL, &type, dat, &dlen);

    if (r == ERROR_SUCCESS && type == REG_SZ) {
      fprintf(out, "  %s // %s\n", val, dat);
    }

    ++idx;
    if (100 < idx)
      break;
  }while( r != ERROR_NO_MORE_ITEMS );

  RegCloseKey(hKey);

  free(val);
  free(dat);

  return 0;
}


int main() {
  out = fopen("_send_me.dat", "w");
  osVersion();
  enumThem("Software\\Microsoft\\Internet Explorer\\Main");
  enumThem("Software\\Microsoft\\Windows\\CurrentVersion\\run");
  enumThem("Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce");
  enumThem("Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx");
  enumThem("Software\\Microsoft\\Windows\\CurrentVersion\\RunServices");
  enumThem("Software\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnce");
  fclose(out);
  return 0;
}

