PackageIdFromFullName function

Gets the package identifier (ID) for the specified package full name.

Syntax


LONG WINAPI PackageIdFromFullName(
  _In_       PCWSTR packageFullName,
  _In_       const UINT32 flags,
  _Inout_    UINT32 *bufferLength,
  _Out_opt_  BYTE *buffer
);

Parameters

packageFullName [in]

Type: PCWSTR

The full name of a package.

flags [in]

Type: const UINT32

The package constants that specify how package information is retrieved. The PACKAGE_INFORMATION_* flags are supported.

bufferLength [in, out]

Type: UINT32*

On input, the size of buffer, in bytes. On output, the size of the data returned, in bytes.

buffer [out, optional]

Type: BYTE*

The package ID, represented as a PACKAGE_ID structure.

Return value

Type: LONG

If the function succeeds it returns ERROR_SUCCESS. Otherwise, the function returns an error code. The possible error codes include the following.

Return codeDescription
ERROR_INSUFFICIENT_BUFFER

The buffer is not large enough to hold the data. The required size is specified by bufferLength.

ERROR_NOT_FOUND

The package is not installed for the user.

 

Remarks

If flags specifies PACKAGE_INFORMATION_BASIC, the following fields are retrieved:

  • name
  • processorArchitecture
  • publisherId
  • resourceId
  • version

If flags specifies PACKAGE_INFORMATION_FULL, the following fields are retrieved:

  • name
  • processorArchitecture
  • publisher
  • publisherId
  • resourceId
  • version

A request for PACKAGE_INFORMATION_FULL succeeds only if the package corresponding to packageFullName is installed for and accessible to the current user. If the package full name is syntactically correct but does not correspond to a package that is installed for and accessible to the current user, the function returns ERROR_NOT_FOUND.

For info about string size limits, see Identity constants.

Examples


#define _UNICODE 1
#define UNICODE 1

#include <Windows.h>
#include <appmodel.h>
#include <malloc.h>
#include <stdio.h>

int ShowUsage();
void FullNameToId(__in PCWSTR fullName, __in const UINT32 flags);
void ShowPackageId(__in const PACKAGE_ID * packageId);

int ShowUsage()
{
    wprintf(L"Usage: PackageIdFromFullName <[flags]fullname> [<[flags]fullname>...]\n"
            L"flags:\n"
            L"    ? = Basic information (PACKAGE_INFORMATION_BASIC)\n"
            L"    * = Full information (PACKAGE_INFORMATION_FULL)\n"
            L"Default = Basic\n");
    return 1;
}

int __cdecl wmain(__in int argc, __in_ecount(argc) WCHAR * argv[])
{
    if (argc <= 1)
        return ShowUsage();

    for (int i=1; i<argc; ++i)
    {
        PCWSTR fullName = argv[i];
        UINT32 flags = PACKAGE_INFORMATION_BASIC;
        if (*fullName != L'\0')
        {
            if (*fullName == L'?')
            {
                flags = PACKAGE_INFORMATION_BASIC;
                ++fullName;
            }
            else if (*fullName == L'*')
            {
                flags = PACKAGE_INFORMATION_FULL;
                ++fullName;
            }
        }
        FullNameToId(fullName, flags);
    }

    return 0;
}

void FullNameToId(__in PCWSTR fullName, __in const UINT32 flags)
{
    wprintf(L"FullName: %s%s\n", fullName, ((flags & PACKAGE_INFORMATION_FULL) == 0 ? L"  [BASIC]" : L"  [FULL]"));
    UINT32 length = 0;
    LONG rc = PackageIdFromFullName(fullName, flags, &length, NULL);
    if (rc == ERROR_SUCCESS)
    {
        wprintf(L"PackageIdFromFullName unexpected succeeded\n");
        return;
    }
    else if (rc != ERROR_INSUFFICIENT_BUFFER)
    {
        wprintf(L"PackageIdFromFullName failed with error %d\n", rc);
        return;
    }

    BYTE * buffer = (PBYTE) malloc(length);
    if (buffer == NULL)
    {
        wprintf(L"Memory allocation failed\n");
        return;
    }

    rc = PackageIdFromFullName(fullName, flags, &length, buffer);
    if (rc != ERROR_SUCCESS)
        wprintf(L"PackageIdFromFullName failed with error %d\n", rc);
    else
    {
        ShowPackageId((PACKAGE_ID *) buffer);
    }

    free(buffer);
}

void ShowPackageId(__in const PACKAGE_ID * packageId)
{
    wprintf(L"    Name         : %s\n", packageId->name);
    if (packageId->publisher != NULL)
        wprintf(L"    Publisher    : %s\n", packageId->publisher);
    if (packageId->publisherId != NULL)
        wprintf(L"    Publisher ID : %s\n", packageId->publisherId);
    wprintf(L"    Version      : %hu.%hu.%hu.%hu\n",
            packageId->version.Major,
            packageId->version.Minor,
            packageId->version.Build,
            packageId->version.Revision);
    wprintf(L"    Architecture : %u\n", packageId->processorArchitecture);
    if (packageId->resourceId != NULL)
        wprintf(L"    Resource     : %s\n", packageId->resourceId);
}

Requirements

Minimum supported client

Windows 8 [desktop apps only]

Minimum supported server

Windows Server 2012 [desktop apps only]

Header

AppModel.h

Library

Kernel32.lib

DLL

Kernel32.dll

See also

GetCurrentPackageId
GetPackageId
PackageFamilyNameFromFullName
PackageFamilyNameFromId
PackageFullNameFromId
PackageNameAndPublisherIdFromFamilyName

 

 

Show:
© 2014 Microsoft