Доброго времени суток! Немогу разобраться в следующей ситуации, ответов в нете не нашел, сам пока не смекнул. Хочу получить список и некоторую инфу для установленных сервисов (ядра и пользователских). Ну начинаю стандартно с OpenSCManager, SC_MANAGER_ENUMERATE_SERVICE установлен и тд, все хорошо. Использую функцию EnumServicesStatusEx, которая заполняет переданный буфер структурами ENUM_SERVICE_STATUS_PROCESS, содержащими информацию об установленных сервисах. Все бы хорошо, однако ЧАСТЬ сервисов в полях lpServiceName и lpDisplayName(указатели на строки) содержит какую-то ересь, и выходит, что при попытке считать/сравнить эти строки я естественно получаю acces violation. Посмотрел ключи в реестре, оказалось, что сервисов (и драйверов ядра и сервисов пользовательского режима) у которых эти поля действительно пустые(нет ключей) крайне мало, а у меня в 2х из 3х структур такая котовасия. В то же время часть структур возвращаемых все той же EnumServicesStatusEx содержит какие то дикие значения в полях типа сервисов и их состояния (dwCurrentState и dwServiceType) а именно вместо 0x02h - 0x020h там какие то немыслимые чилса типа 13467247d. В нете не удалось найти упоминания о такого рода кракозябрах. Наставьте на путь истинный пожалуйста. PS буфер вроде корректно предоставляю, сначала делаю запрос на то сколько байт необходимо, потом new ну и тд. Яасть структур нормальне часть какие-то левые.
Хм..42 просмотра и ни одного ответа может я как-то слабопонятно описал ситуацию?Если непонятен вопрос то еще раз уточню : что это за службы такие загадочные?По какой причине структуры их описывающие содержат полную х-ню?
В общем можно сазать по совету YormLokison попробовал использовать вместо Ex версии просто EnumServicesStatus и все заработало нормально.