Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список сервисов не выводится читабельно, функция EnumServicesStatusEx 
:(
    Опции темы
Ksen
Дата 28.4.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Подскажите пожалуйста....почему у меня не выводятся на консоль нормальные читаемые названия сервисов?   lpservice[i].lpServiceName выводит только одни цифры непонятные(((( что надо ещё добавить?
Код

#include "windows.h"
#include "iostream"    
#include <stdio.h>
using namespace std;

int wmain(int argc, wchar_t* argv[], wchar_t* envp[])
{
     SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
    
    //ENUM_SERVICE_STATUS_PROCESS Services[100] = { 0 };
    ENUM_SERVICE_STATUS *lpservice;
    DWORD dwBytesNeeded = 0;
    DWORD dwServicesReturned = 0;
    DWORD dwResumeHandle = 0;
    BOOL bSuccess = FALSE;
        bSuccess = EnumServicesStatusEx(hSCManager, 
                                SC_ENUM_PROCESS_INFO,
                                SERVICE_WIN32, 
                                SERVICE_STATE_ALL, 
                                NULL,
                                0,
                                &dwBytesNeeded, 
                                &dwServicesReturned,
                                &dwResumeHandle, 
                                NULL);
        
    DWORD err = GetLastError();
        
        if (!bSuccess || err == ERROR_MORE_DATA)
              {
                     DWORD dwBytes = dwBytesNeeded + sizeof(ENUM_SERVICE_STATUS);
                     lpservice = new ENUM_SERVICE_STATUS [dwBytes];
                     EnumServicesStatusEx(hSCManager, 
                              SC_ENUM_PROCESS_INFO,
                              SERVICE_WIN32, 
                              SERVICE_STATE_ALL, 
                              LPBYTE(lpservice),
                              dwBytes,
                              &dwBytesNeeded, 
                              &dwServicesReturned,
                              &dwResumeHandle, 
                              NULL);
              }


    for(int i=0; i<dwServicesReturned; i++)
    cout << lpservice[i].lpServiceName << endl;

    CloseServiceHandle(hSCManager);
}

PM MAIL ICQ   Вверх
jimbo
Дата 28.4.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Код

wcout << lpservice[i].lpServiceName << endl;

?
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
Ksen
Дата 28.4.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



(((сделала как msdn велит...но Display Name русским языком не выводится? что нужно сделать чтобы выводил?

Код

#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
 SC_HANDLE hSCM    = NULL;
 PUCHAR  pBuf    = NULL;
 ULONG  dwBufSize   = 0x00;
 ULONG  dwBufNeed   = 0x00;
 ULONG  dwNumberOfService = 0x00;

 LPENUM_SERVICE_STATUS_PROCESS pInfo = NULL;

 hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_CONNECT);

 if (hSCM == NULL)
 {
  printf_s("OpenSCManager fail \n");
  return 0xffff0001;
 }

 EnumServicesStatusEx(
  hSCM,
  SC_ENUM_PROCESS_INFO,
  SERVICE_WIN32, // SERVICE_DRIVER
  SERVICE_STATE_ALL,
  NULL,
  dwBufSize,
  &dwBufNeed,
  &dwNumberOfService,
  NULL,
  NULL);

 if (dwBufNeed < 0x01)
 {
  printf_s("EnumServicesStatusEx fail ?? \n");
  return 0xffff0002;
 }

 dwBufSize = dwBufNeed + 0x10;
 pBuf  = (PUCHAR) malloc(dwBufSize);

 EnumServicesStatusEx(
  hSCM,
  SC_ENUM_PROCESS_INFO,
  SERVICE_WIN32,  // SERVICE_DRIVER,
  SERVICE_ACTIVE,  //SERVICE_STATE_ALL,
  pBuf,
  dwBufSize,
  &dwBufNeed,
  &dwNumberOfService,
  NULL,
  NULL);

 pInfo = (LPENUM_SERVICE_STATUS_PROCESS)pBuf;
 for (ULONG i=0;i<dwNumberOfService;i++)
 {
  wprintf_s(L"Display Name \t : %s \n", pInfo[i].lpDisplayName);
  wprintf_s(L"Service Name \t : %s \n", pInfo[i].lpServiceName);
  //wprintf_s(L"Process Id \t : %04x (%d) \n", pInfo[i].ServiceStatusProcess.dwProcessId, pInfo[i].ServiceStatusProcess.dwProcessId);
 }

 free(pBuf);

 CloseServiceHandle(hSCM);

 return 0;
}


Добавлено через 14 минут и 31 секунду
wcout << lpservice[i].lpServiceName << endl;

а что вам здесь не нравится?...не понимаю...
PM MAIL ICQ   Вверх
jimbo
Дата 28.4.2011, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет




Код

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <locale.h>

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"russian");
 SC_HANDLE hSCM    = NULL;
 PUCHAR  pBuf    = NULL;
 ULONG  dwBufSize   = 0x00;
 ULONG  dwBufNeed   = 0x00;
 ULONG  dwNumberOfService = 0x00;
 LPENUM_SERVICE_STATUS_PROCESS pInfo = NULL;
 hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_CONNECT);
 if (hSCM == NULL)
 {
  printf_s("OpenSCManager fail \n");
  return 0xffff0001;
 }
 EnumServicesStatusEx(
  hSCM,
  SC_ENUM_PROCESS_INFO,
  SERVICE_WIN32, // SERVICE_DRIVER
  SERVICE_STATE_ALL,
  NULL,
  dwBufSize,
  &dwBufNeed,
  &dwNumberOfService,
  NULL,
  NULL);
 if (dwBufNeed < 0x01)
 {
  printf_s("EnumServicesStatusEx fail ?? \n");
  return 0xffff0002;
 }
 dwBufSize = dwBufNeed + 0x10;
 pBuf  = (PUCHAR) malloc(dwBufSize);
 EnumServicesStatusEx(
  hSCM,
  SC_ENUM_PROCESS_INFO,
  SERVICE_WIN32,  // SERVICE_DRIVER,
  SERVICE_ACTIVE,  //SERVICE_STATE_ALL,
  pBuf,
  dwBufSize,
  &dwBufNeed,
  &dwNumberOfService,
  NULL,
  NULL);
 pInfo = (LPENUM_SERVICE_STATUS_PROCESS)pBuf;
 for (ULONG i=0;i<dwNumberOfService;i++)
 {
  wprintf_s(L"Display Name \t : %s \n", pInfo[i].lpDisplayName);
  wprintf_s(L"Service Name \t : %s \n", pInfo[i].lpServiceName);
  //wprintf_s(L"Process Id \t : %04x (%d) \n", pInfo[i].ServiceStatusProcess.dwProcessId, pInfo[i].ServiceStatusProcess.dwProcessId);
 }
 free(pBuf);
 CloseServiceHandle(hSCM);
 return 0;
}

--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1160 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.