Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Obtiene el nombre completo del paquete para el token especificado.
Sintaxis
LONG GetPackageFullNameFromToken(
[in] HANDLE token,
[in, out] UINT32 *packageFullNameLength,
[out, optional] PWSTR packageFullName
);
Parámetros
[in] token
Token que contiene la identidad del paquete.
[in, out] packageFullNameLength
En la entrada, el tamaño del búfer packageFullName , en caracteres. En la salida, se devuelve el tamaño del nombre completo del paquete, en caracteres, incluido el terminador NULL.
[out, optional] packageFullName
Nombre completo del paquete.
Valor devuelto
Si la función se realiza correctamente, devuelve ERROR_SUCCESS. De lo contrario, la función devuelve un código de error. Los posibles códigos de error incluyen lo siguiente.
| Código devuelto | Descripción |
|---|---|
|
El token no tiene ninguna identidad de paquete. |
|
El búfer no es lo suficientemente grande como para contener los datos. El tamaño necesario se especifica mediante packageFullNameLength. |
Comentarios
Para obtener información sobre los límites de tamaño de cadena, consulte Constantes de identidad.
Ejemplos
/***************************************************
* *
* 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 ShowProcessPackageFullName(__in const UINT32 pid, __in HANDLE token);
int ShowUsage()
{
wprintf(L"Usage: GetPackageFullNameFromToken <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
{
ShowProcessPackageFullName(pid, token);
CloseHandle(token);
}
CloseHandle(process);
}
}
}
return 0;
}
void ShowProcessPackageFullName(__in const UINT32 pid, __in HANDLE token)
{
wprintf(L"Process %u (token=%p)\n", pid, token);
UINT32 length = 0;
LONG rc = GetPackageFullNameFromToken(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 GetPackageFullNameFromToken\n", rc);
return;
}
PWSTR fullName = (PWSTR) malloc(length * sizeof(*fullName));
if (fullName == NULL)
{
wprintf(L"Error allocating memory\n");
return;
}
rc = GetPackageFullNameFromToken(token, &length, fullName);
if (rc != ERROR_SUCCESS)
wprintf(L"Error %d retrieving PackageFullName\n", rc);
else
wprintf(L"%s\n", fullName);
free(fullName);
}
Requisitos
| Requisito | Value |
|---|---|
| Cliente mínimo compatible | Windows 8 [solo aplicaciones de escritorio] |
| Servidor mínimo compatible | Windows Server 2012 [solo aplicaciones de escritorio] |
| Plataforma de destino | Windows |
| Encabezado | appmodel.h |
| Library | Kernel32.lib |
| Archivo DLL | Kernel32.dll |