Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134
1

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

26.01.2012, 23:57. Просмотров 2422. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2012, 23:57
Ответы с готовыми решениями:

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

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

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

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

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

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


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

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


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

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

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

Либы не конфликтуют. На счет недостающих, я думаю, что оригинальная либа сама будет искать их в своем коде, уверен на 90%, но попробую дописать более-менее важные. После замены, мою библиотеку начинают использовать все процессы, которым она нужна, и сообщения о нехватке чего-то выскакивает автоматом.
0
antielvis
16.03.2014, 01:23 6
Тоже так не получается. Добавил несколько функций WTSEnumerateSessionsA, WTSQuerySessionInformationW, WTSQuerySessionInformationA, WTSOpenServerA, WTSOpenServerW и WTSFreeMemory. Всё равно пустой список. Хотел отдебажить диспетчер в Ольке, но она впадает в ступор, т.к. это окно постоянно обновляется. Fusix, что-нибудь получилось? Структура PWTS_SESSION_INFO по идеи должна заполянться непосредственно в диспетчере.
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134
16.03.2014, 01:31  [ТС] 7
Получилось. Но я уже забыл, что да как. Напиши в вк, вышлю исходники, если найду. id811441
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2014, 01:31

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

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

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

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

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

Не найден указанный модуль msivijn32.dll
Привет народ! Уж очень бы вы мне помогли бы узнать как избавиться от всплывающего после каждой...

Нужен посредник сделки
спасибо, пока что еще ждем возможного ответа модератора


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.