0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134

Модуль-посредник для wtsapi32.dll

26.01.2012, 23:57. Показов 3624. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Вот пытаюсь написать модель-посредник для wtsapi32.dll. Судь заключается в том, что этот модуль заменяет оригинальный и просто перенаправляет все на оригинальный функции.
При написании функции-посредника WTSEnumerateSessionsW я столкнулся с проблемой. Результат выполнения равен 0. Эта функция перечисляет сессии в диспетчере задач. Если я заменю библиотеку на свою, то список вообще исчезает.
Вот отрывок из кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <windows.h>
#include <stdlib.h>
#include "wtsapi32.h"
 
#pragma argsused
typedef BOOL (WINAPI *WTSENUMERATESESSIONSW)(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOW*, DWORD*);
 
extern "C" __declspec(dllexport) BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_SESSION_INFOW *ppSessionInfo, DWORD *pCount);
 
 
HMODULE hLib = LoadLibrary("wtsapi1.dll");// Оригинальная библиотека
 
BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version, PWTS_SESSION_INFOW *ppSessionInfo, DWORD *pCount)
{
    BOOL ret;
    WTSENUMERATESESSIONSW Orig;
 
    Orig = (WTSENUMERATESESSIONSW)GetProcAddress(hLib, "WTSEnumerateSessionsW");
 
    ret = Orig(hServer, Reserved, Version, ppSessionInfo , pCount);
 
    return ret;
}
Параметры ppSessionInfo , pCount не меняются. Почему?
Описание функции WTSEnumerateSessions (MSDN)
Спасибо.

Добавлено через 11 часов 31 минуту
Актуально

Добавлено через 12 часов 1 минуту
Подъем
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.01.2012, 23:57
Ответы с готовыми решениями:

Посредник для вспомогательной библиотеки
Всем привет. У меня есть много приложений под AutoCAD и Revit. В этих приложениях используется библиотека для оформления окон...

Создать модуль DLL-модуль с классом, позволяющим запускать внешнюю программу
Как же все таки создать модуль DLL-модуль с классом, позволяющим запускать внешнюю программу. На многих форумах да и здесь находил код: ...

"Не удается загрузить DLL Microsoft.DiaSymReader.Native.amd64.dll не найден указанный модуль"
программа Visual Studio Comunity 2017 выскакивает ошибка при записи информации отладки Не удается загрузить DLL...

6
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
27.01.2012, 00:05
При написании функции-посредника WTSEnumerateSessionsW я столкнулся с проблемой. Результат выполнения равен 0
Что это значит? Результат, который у вас в переменную ret кладется или другой?

Если я заменю библиотеку на свою, то список вообще исчезает.
А это что значит? Какая своя библиотека? Какой список откуда исчезает?
1
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134
27.01.2012, 00:26  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
Что это значит? Результат, который у вас в переменную ret кладется или другой?


А это что значит? Какая своя библиотека? Какой список откуда исчезает?
Я пытаюсь написать библиотеку, которая заменяет собой оригинальную (wtsapi32.dll). Она содержит те же самые функции и просто выполняет аналоги из оригинальной библиотеки, которую я загружаю через LoadLibrary и получаю адреса через GetProcAddress. Вот скриншот проблемы:



Добавлено через 3 минуты
При этом функция возвращает true, что верно. GetLastErro молчит. Мне кажется, что в оригинальной функции не заполняется структура PWTS_SESSION_INFO. Почему? Я же верно передаю параметры

Добавлено через 1 минуту
OllyDbg-ом проверял, параметры передаются верно, как и в оригинале. Может ли это быть потому, что я не все функции реализовал в своей библиотеке?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
27.01.2012, 00:40
ну похоже в вашем случае проблемы начинающих отпадают. просто с ходу вам врятли ответят, если с этим не имели дело. Нужно исследовать.
То, что вы не все ф-ии определили - это запросто может повлиять. Ведь не факт что список заполняется по результатом вызова ф-ии, которую вы тут привели. Или это факт?
Я так понял вы свою дллку написали и подсунули вместо родной. И какой-то процесс подхватывает вашу. Так чтоли? А как ваша не конфликтует с родной? имена поменяли?
Может где-то какие-то логи есть в которых можно попробовать что-то полезное найти.
Можно так же попробовать позапускать какую-нибудь другую тулзу, которая тоже использует то апи, которо вы подменили, procexp какой-нибудь или что-то типа того. как они себя ведут? может быть они начнут ругаться как-то на то, что в подмененной дллке чего-то не хватает.

В общем вам лучше в какой нибудь профильный форум с этим вопросом переехать.
1
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134
27.01.2012, 00:52  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
ну похоже в вашем случае проблемы начинающих отпадают. просто с ходу вам врятли ответят, если с этим не имели дело. Нужно исследовать.
То, что вы не все ф-ии определили - это запросто может повлиять. Ведь не факт что список заполняется по результатом вызова ф-ии, которую вы тут привели. Или это факт?
Я так понял вы свою дллку написали и подсунули вместо родной. И какой-то процесс подхватывает вашу. Так чтоли? А как ваша не конфликтует с родной? имена поменяли?
Может где-то какие-то логи есть в которых можно попробовать что-то полезное найти.
Можно так же попробовать позапускать какую-нибудь другую тулзу, которая тоже использует то апи, которо вы подменили, procexp какой-нибудь или что-то типа того. как они себя ведут? может быть они начнут ругаться как-то на то, что в подмененной дллке чего-то не хватает.
Вы все верно написали. Диспетчер задач как раз юзает апи этой библиотеки.

Либы не конфликтуют. На счет недостающих, я думаю, что оригинальная либа сама будет искать их в своем коде, уверен на 90%, но попробую дописать более-менее важные. После замены, мою библиотеку начинают использовать все процессы, которым она нужна, и сообщения о нехватке чего-то выскакивает автоматом.
0
antielvis
16.03.2014, 01:23
Тоже так не получается. Добавил несколько функций WTSEnumerateSessionsA, WTSQuerySessionInformationW, WTSQuerySessionInformationA, WTSOpenServerA, WTSOpenServerW и WTSFreeMemory. Всё равно пустой список. Хотел отдебажить диспетчер в Ольке, но она впадает в ступор, т.к. это окно постоянно обновляется. Fusix, что-нибудь получилось? Структура PWTS_SESSION_INFO по идеи должна заполянться непосредственно в диспетчере.
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134
16.03.2014, 01:31  [ТС]
Получилось. Но я уже забыл, что да как. Напиши в вк, вышлю исходники, если найду. id811441
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2014, 01:31
Помогаю со студенческими работами здесь

DLL модуль
Всем доброе утро. Есть программа которая отправляет с помощью логина и пароля от почты маила смс, но программа разбита на две части. как из...

Посредник и overload
Добрый день. Пытаюсь реализовать паттерны медиатор, команда и актер и столкнулся с такой странностью. У актера есть два перегруженных...

не найден указанный модуль msivijn32.dll
Народ, помогите пожалуйста с данной проблемой. Вообщем при запуске системы выскакивает окно runDLL где написано не найден указанный модуль...

ldr.dll не найден указанный модуль
Одно время ПК перезагружался и медлено работал, вроде все отличила, сейчас комп работает нормально, но появляется надпись &quot;ldr.dll не...

Как вызвать модуль Clipbrd из dll?
Добрый день, пытаясь вызвать модуль Clipbrd из dll пишет что модуль не найден хотя в программе всё отлично работает.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru