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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
26.01.2012, 23:57     Модуль-посредник для wtsapi32.dll #1
Здравствуйте. Вот пытаюсь написать модель-посредник для 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
Посмотрите здесь:

C++ программный модуль для тестирования знаний
C++ модуль для проверки вводимых данных
Модуль для хранения процедуры создания картинки C++
Создать модуль DLL библиотек с функциями вычисления размера файла C++
C++ WinAPI Модуль ядра для windows
Модуль для перевода числовых записей в строковые C++
Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 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
1478 / 1054 / 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
Еще ссылки по теме:

Модуль для Rad Studio типа VAssist для Visual Studio C++ Builder
C++ Модуль генерации меню для оконного приложения
C++ Модуль с++ для вижуал студио
C++ Префикс __imp__ попадает в exe-шный модуль из DLL
DLL для запуска C++

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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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