Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2017, 10:21   #1
AnnaАнна
Новичок
Джуниор
 
Регистрация: 24.02.2017
Сообщений: 1
По умолчанию Выведение привилегий процесса и их состояния

Доброго дня! Написан код, который должен выводить список привилегий процесса и их состояние, он работает, но есть одно НО: для любого процесса будь то explorer или winlogon, данный код выводит всего пять одинаковых привилегий и только состояние одной привилегии (причем одновременно два)... Я не понимаю в чем дело... Прошу помочь...
Код:
    #include "stdafx.h"//библиотека для сборки пакетов
    #include <windows.h>//библиотека содержит пакет winapi-функций
    #include <iostream>//библиотека для организации ввода-вывода
    #include <psapi.h> //библиотека работы с памятью
    #include <stdio.h>
    #include <Tlhelp32.h> 
    #pragma comment(lib, "Advapi32.lib")

    #pragma hdrstop


    void main()
    {
HANDLE hToken;
LUID setcbnameValue;
TOKEN_PRIVILEGES tkp;
DWORD errcod;
LPVOID lpMsgBuf;
LPCTSTR msgptr;

UCHAR InfoBuffer[1000];
PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES)InfoBuffer;
DWORD dwInfoBufferSize;
DWORD dwPrivilegeNameSize;
DWORD dwDisplayNameSize;
WCHAR ucPrivilegeName[500];
WCHAR ucDisplayName[500];
DWORD dwLangId;
UINT i;

if (!OpenProcessToken(GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
    puts("OpenProcessToken");
    return;
}


GetTokenInformation(hToken, TokenPrivileges, InfoBuffer,
    sizeof InfoBuffer, &dwInfoBufferSize);

printf("Account privileges: \n\n");
for (i = 0; i < ptgPrivileges->PrivilegeCount; i++)
{
    dwPrivilegeNameSize = sizeof ucPrivilegeName;
    dwDisplayNameSize = sizeof ucDisplayName;
    LookupPrivilegeNameA(NULL, &ptgPrivileges->Privileges[i].Luid,
        (char *)ucPrivilegeName, &dwPrivilegeNameSize);

    printf("%s   (%s)\n", ucPrivilegeName);

    if((ptgPrivileges->Privileges[i].Attributes & SE_PRIVILEGE_ENABLED) == SE_PRIVILEGE_ENABLED )
    {
        printf("SE_PRIVILEGE_ENABLED:\n");
    }

    if((ptgPrivileges->Privileges[i].Attributes & SE_PRIVILEGE_ENABLED_BY_DEFAULT) == SE_PRIVILEGE_ENABLED_BY_DEFAULT )
    {
        printf("SE_PRIVILEGE_ENABLED_BY_DEFAULT:\n");
    }

    if((ptgPrivileges->Privileges[i].Attributes & SE_PRIVILEGE_REMOVED) == SE_PRIVILEGE_REMOVED)
    {
        printf("SE_PRIVILEGE_REMOVED:\n");
    }

    if((ptgPrivileges->Privileges[i].Attributes & SE_PRIVILEGE_USED_FOR_ACCESS) == SE_PRIVILEGE_USED_FOR_ACCESS)
    {
        printf("SE_PRIVILEGE_USED_FOR_ACCESS:\n");
    }
}
system("pause");

Последний раз редактировалось Alex11223; 24.02.2017 в 10:26.
AnnaАнна вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Назначение привилегий Kepushka97 Microsoft Office Access 2 10.03.2016 15:11
Установка привилегий доступа кданным Kepushka97 Microsoft Office Access 1 10.03.2016 15:11
Применение привилегий сразу к нескольким таблицам Muramidaza БД в Delphi 0 18.03.2014 22:44
Запуск процесса в потоке, завершение процесса в указааноое время, Дайте совет Человек_Борща Общие вопросы Delphi 3 29.08.2010 12:58
Настройка привилегий из Delphi unicode БД в Delphi 6 04.07.2009 13:03