text: #include <windows.h>
  #include <ole2.h>
  #include <appmgmt.h>
  #include <stdlib.h>
  #include <stdio.h>
  
  
  void
  GuidToString(
      GUID &  Guid,
      PWCHAR  pwszGuid
      )
  {
      wsprintf(
          pwszGuid,
          L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
          Guid.Data1,
          Guid.Data2,
          Guid.Data3,
          Guid.Data4[0],
          Guid.Data4[1],
          Guid.Data4[2],
          Guid.Data4[3],
          Guid.Data4[4],
          Guid.Data4[5],
          Guid.Data4[6],
          Guid.Data4[7]
          );
  }
  
  void
  StringToGuid(
      PCHAR  pszGuid,
      GUID * pGuid
      )
  {
      WCHAR wszGuid[256];
  
      wsprintf((WCHAR*)wszGuid, L"%S", pszGuid);
      CLSIDFromString(wszGuid, pGuid);
  }
  
  
  void __cdecl main(int argc, char** argv)
  {
      LONG Error;
      PMANAGEDAPPLICATION rgApps;
      DWORD               dwApps;
      GUID                CategoryGuid;
      GUID*               pCategory = NULL;
  
      if (argc >= 2) {
          
          StringToGuid(argv[1], &CategoryGuid);
  
          pCategory = &CategoryGuid;
  
          printf("Listed apps will come from category %s\n", argv[1]);
          
      }
  
      Error = GetManagedApplications(
          pCategory,
          pCategory ? MANAGED_APPS_FROMCATEGORY : MANAGED_APPS_USERAPPLICATIONS,
          MANAGED_APPS_INFOLEVEL_DEFAULT,
          &dwApps,
          &rgApps);
  
      if (ERROR_SUCCESS == Error) {
  
          printf("GetManagedApplications SUCCEEDED\n");
  
          printf("Returned %d Apps\n", dwApps);
  
          for (DWORD dwApp = 0; dwApp < dwApps; dwApp ++)
          {
              WCHAR wszGuid[256];
              PMANAGEDAPPLICATION pApp;
  
              pApp = &(rgApps[dwApp]);
  
              printf("\nApp: %ls\n", rgApps[dwApp].pszPackageName);
  
              printf("Publisher: %ls\n", pApp->pszPublisher);
  
              printf("Revison: %d.%d build %d\n", pApp->dwVersionHi, pApp->dwVersionLo, pApp->dwRevision);
  
              printf("Support URL: %ls\n", rgApps[dwApp].pszSupportUrl);
              
              printf("GPO Name: %ls\n", rgApps[dwApp].pszPolicyName);
  
              GuidToString(rgApps[dwApp].GpoId, wszGuid);
              printf("GPO: %ls\n", wszGuid);
              fflush(stdin);
  
              GuidToString(rgApps[dwApp].ProductId, wszGuid);
              printf("Product: %ls\n", wszGuid);
              fflush(stdin);
  
              printf("App Path Type ");
  
              switch (rgApps[dwApp].dwPathType)
              {
              case MANAGED_APPTYPE_WINDOWSINSTALLER:
                  printf("Darwin\n");
                  break;
              case MANAGED_APPTYPE_SETUPEXE:
                  printf("Crappy ZAW\n");
                  break;
              case MANAGED_APPTYPE_UNSUPPORTED:
                  printf("Unsupported\n");
                  break;
              default:
                  printf("INVALID\n");
              }
  
              fflush(stdin);
          }
  
          LocalFree(rgApps);
  
      } else {
          printf("GetManagedApplications returned %x\n", Error);
      }
  
  }
  
  
  
  
  
  
  
  