Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
#1

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

26.01.2012, 23:57. Просмотров 1700. Ответов 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 минуту
Подъем
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2012, 23:57     Модуль-посредник для wtsapi32.dll
Посмотрите здесь:

Префикс __imp__ попадает в exe-шный модуль из DLL - C++
Помогите плз убрать префикс. Импортирую Переменные из Длл в екзешник, явным способом по книже Пецольда. Заголовочный файл созданый...

Создать модуль DLL библиотек с функциями вычисления размера файла - C++
доброго времени суток! Есть довольно обширное задание у меня из которого я никак не могу одолеть следующую часть: Создать модуль DLL...

Модуль ядра для windows - C++ WinAPI
Расскажите, добрые люди, что это такое? И в чем отличия модулей ядра от каких бы то ни было драйверов? А самое главное - пошлите меня туда,...

Модуль с++ для вижуал студио - C++
Скачал с киберфорума вижуал студио, но не запускаются программы, опишите, как сделать, чтобы все работало

программный модуль для тестирования знаний - C++
привет)нужнапрограмма...на С++ Разработка программного модуля для тестирования знаний. Программный мо- дуль должен обеспечивать возможность...

модуль для проверки вводимых данных - C++
Есть программа, #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; void...

Модуль для перевода числовых записей в строковые - C++
Модуль для перевода числовых записей (&quot;1213&quot;) в строковые (&quot;тысяча двести тринадцать&quot;) и обратно. Предусмотреть числа максимально...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
27.01.2012, 00:05     Модуль-посредник для wtsapi32.dll #2
При написании функции-посредника WTSEnumerateSessionsW я столкнулся с проблемой. Результат выполнения равен 0
Что это значит? Результат, который у вас в переменную ret кладется или другой?

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


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

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

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

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

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

Либы не конфликтуют. На счет недостающих, я думаю, что оригинальная либа сама будет искать их в своем коде, уверен на 90%, но попробую дописать более-менее важные. После замены, мою библиотеку начинают использовать все процессы, которым она нужна, и сообщения о нехватке чего-то выскакивает автоматом.
antielvis
Сообщений: n/a
16.03.2014, 01:23     Модуль-посредник для wtsapi32.dll #6
Тоже так не получается. Добавил несколько функций WTSEnumerateSessionsA, WTSQuerySessionInformationW, WTSQuerySessionInformationA, WTSOpenServerA, WTSOpenServerW и WTSFreeMemory. Всё равно пустой список. Хотел отдебажить диспетчер в Ольке, но она впадает в ступор, т.к. это окно постоянно обновляется. Fusix, что-нибудь получилось? Структура PWTS_SESSION_INFO по идеи должна заполянться непосредственно в диспетчере.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 01:31     Модуль-посредник для wtsapi32.dll
Еще ссылки по теме:

Модуль для хранения процедуры создания картинки - C++
Создайте модуль, в котором будет храниться процедура создания следующей картинки. Используя модуль, поместите картинку по углам экрана и в...

Модуль генерации меню для оконного приложения - C++
Помогите пожалуйста сделать модуль генерации меню для оконного приложения на C++

C++ обертка для dll C - C++
Как написать C++ обертку для динамической библиотеки C?

DLL для запуска - C++
Всем доброго времени суток =) Пишу в MVS 2012, знаю что если запускать программы на других компах, то требует DLL, подскажите, какие? ...

Окно для DLL - C++
Всем привет! Есть уже готовая DLL... Нужно чтобы на экране отображался прогрессбар или хотя бы было окошко с уведомлением что DLL...


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

Или воспользуйтесь поиском по форуму:
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
16.03.2014, 01:31  [ТС]     Модуль-посредник для wtsapi32.dll #7
Получилось. Но я уже забыл, что да как. Напиши в вк, вышлю исходники, если найду. id811441
Yandex
Объявления
16.03.2014, 01:31     Модуль-посредник для wtsapi32.dll
Ответ Создать тему
Опции темы

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