Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ruft den Paketfamiliennamen für das angegebene Token ab.
Syntax
LONG GetPackageFamilyNameFromToken(
[in] HANDLE token,
[in, out] UINT32 *packageFamilyNameLength,
[out, optional] PWSTR packageFamilyName
);
Parameter
[in] token
Typ: HANDLE
Ein Token, das die Paketidentität enthält.
[in, out] packageFamilyNameLength
Typ: UINT32*
Bei der Eingabe die Größe des PackageFamilyName-Puffers in Zeichen. Bei der Ausgabe wird die Größe des zurückgegebenen Paketfamiliennamens in Zeichen, einschließlich des NULL-Abschlussators, zurückgegeben.
[out, optional] packageFamilyName
Typ: PWSTR
Der Paketfamilienname.
Rückgabewert
Typ: LONG
Wenn die Funktion erfolgreich ist, gibt sie ERROR_SUCCESS zurück. Andernfalls gibt die Funktion einen Fehlercode zurück. Zu den möglichen Fehlercodes gehören die folgenden:
Rückgabecode | Beschreibung |
---|---|
|
Das Token verfügt über keine Paketidentität. |
|
Der Puffer ist nicht groß genug, um die Daten aufzunehmen. Die erforderliche Größe wird von packageFamilyNameLength angegeben. |
Hinweise
Informationen zu Zeichenfolgengrößenbeschränkungen finden Sie unter Identitätskonstanten.
Beispiele
/***************************************************
* *
* Copyright (C) Microsoft. All rights reserved. *
* *
***************************************************/
#define _UNICODE 1
#define UNICODE 1
#include <Windows.h>
#include <appmodel.h>
#include <appmodelp.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
int ShowUsage();
void ShowProcessPackageFamilyName(__in const UINT32 pid, __in HANDLE token);
int ShowUsage()
{
wprintf(L"Usage: GetPackageFamilyNameFromToken <pid> [<pid>...]\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)
{
UINT32 pid = wcstoul(argv[i], NULL, 10);
if (pid > 0)
{
HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
if (process == NULL)
wprintf(L"Error %d in OpenProcess (pid=%u)\n", GetLastError(), pid);
else
{
HANDLE token;
if (!OpenProcessToken(process, TOKEN_QUERY, &token))
wprintf(L"Error %d in OpenProcessToken (pid=%u)\n", GetLastError(), pid);
else
{
ShowProcessPackageFamilyName(pid, token);
CloseHandle(token);
}
CloseHandle(process);
}
}
}
return 0;
}
void ShowProcessPackageFamilyName(__in const UINT32 pid, __in HANDLE token)
{
wprintf(L"Process %u (token=%p)\n", pid, token);
UINT32 length = 0;
LONG rc = GetPackageFamilyNameFromToken(token, &length, NULL);
if (rc != ERROR_INSUFFICIENT_BUFFER)
{
if (rc == APPMODEL_ERROR_NO_PACKAGE)
wprintf(L"Token has no package identity\n");
else
wprintf(L"Error %d in GetPackageFamilyNameFromToken\n", rc);
return;
}
PWSTR familyName = (PWSTR) malloc(length * sizeof(*familyName));
if (familyName == NULL)
{
wprintf(L"Error allocating memory\n");
return;
}
rc = GetPackageFamilyNameFromToken(token, &length, familyName);
if (rc != ERROR_SUCCESS)
wprintf(L"Error %d retrieving PackageFamilyName\n", rc);
else
wprintf(L"%s\n", familyName);
free(familyName);
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2012 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | appmodel.h |
Bibliothek | Kernel32.lib |
DLL | Kernel32.dll |