Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Возвращает идентификатор модели пользователя приложения для указанного маркера.
Синтаксис
LONG GetApplicationUserModelIdFromToken(
[in] HANDLE token,
[in, out] UINT32 *applicationUserModelIdLength,
[out] PWSTR applicationUserModelId
);
Параметры
[in] token
Маркер, содержащий удостоверение приложения. Этот дескриптор должен иметь право доступа PROCESS_QUERY_LIMITED_INFORMATION . Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.
[in, out] applicationUserModelIdLength
На входных данных — размер буфера applicationUserModelId в расширенных символах. При успешном выполнении — размер используемого буфера, включая признак конца null.
[out] applicationUserModelId
Указатель на буфер, который получает идентификатор модели пользователя приложения.
Возвращаемое значение
Если функция завершается успешно, она возвращает ERROR_SUCCESS. В противном случае функция возвращает код ошибки. Возможные коды ошибок включают следующие.
| Код возврата | Описание |
|---|---|
|
Маркер не имеет удостоверения приложения. |
|
Буфер недостаточно велик для хранения данных. Требуемый размер определяется параметром applicationUserModelIdLength. |
Комментарии
Сведения об ограничениях размера строк см. в разделе Константы удостоверений.
Примеры
/***************************************************
* *
* 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 ShowProcessApplicationUserModelId(__in const UINT32 pid, __in HANDLE token);
int ShowUsage()
{
wprintf(L"Usage: GetApplicationUserModelIdFromToken <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
{
ShowProcessApplicationUserModelId(pid, token);
CloseHandle(token);
}
CloseHandle(process);
}
}
}
return 0;
}
void ShowProcessApplicationUserModelId(__in const UINT32 pid, __in HANDLE token)
{
wprintf(L"Process %u (token=%p)\n", pid, token);
UINT32 length = 0;
LONG rc = GetApplicationUserModelIdFromToken(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 GetApplicationUserModelIdFromToken\n", rc);
return;
}
PWSTR applicationUserModelId = (PWSTR) malloc(length * sizeof(*applicationUserModelId));
if (applicationUserModelId == NULL)
{
wprintf(L"Error allocating memory\n");
return;
}
rc = GetApplicationUserModelIdFromToken(token, &length, applicationUserModelId);
if (rc != ERROR_SUCCESS)
wprintf(L"Error %d retrieving ApplicationUserModelId\n", rc);
else
wprintf(L"%s\n", applicationUserModelId);
free(applicationUserModelId);
}
Требования
| Требование | Значение |
|---|---|
| Целевая платформа | Windows |
| Header | appmodel.h |
| Библиотека | Kernel32.lib |
| DLL | Kernel32.dll |