Определить ProcessID по пайпу

Тема в разделе "WASM.BEGINNERS", создана пользователем l_inc, 12 дек 2007.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Пусть у меня есть пайп-сервер на блокирующих пайпах. Подскажите, пожалуйста, как в момент возврата из ConnectNamedPipe определить клиентский процесс, который подключился к моему пайпу, если протокол обмена сообщениями с клиентским процессом в общем случае не известен (т.е. я не могу послать процессу по пайпу "Ты кто?", и он мне сразу всю свою подноготную выложит). И можно способ по проще и по документированнее? А то глобальный перехват CreateFile меня не привлекает.
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    перечислить хендлы и посмотреть у какого процесса ещё есть открытый хендл твоего пайпа
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    asd
    Видимо не через toolhelp api, а через ZwQuerySystemInformation. Не очень тянет на документированность, но хоть несложно.
    А как определить, что хэндл открытого пайпа - это именно хэндл моего именованого пайпа? (забыл сказать, что пайп именованый) Т.е. вопрос сводится к тому, как получить имя пайпа по его хэндлу?
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    l_inc
    Да с ToolHelp я конечно маху дал на ночь глядя. Посмотри тут http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=21&m=133073
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    asd
    Большое спасибо. ZwQueryObject возвращает то, что надо.

    Не в тему вопрос, но так как я новичек в C++... При статическом импорте из dll мне не нравится пользоваться либами и заголовочными файлами (пережиток VB... да и фасма). Методом мат тыка и изучения заголовочных файлов научился делать вот так:
    Код (Text):
    1. extern "C" __declspec(dllimport) unsigned long __stdcall ZwQueryObject(unsigned long ObjectHandle, unsigned long ObjectInformationClass, unsigned char *ObjectInformation, unsigned long ObjectInformationLength, unsigned long *ReturnLength);
    Но такое объявление совсем не освобождает от подключения к проекту ntdll.lib. Как бы в этом объявлении указать экспортирующую dll и совсем избавиться от либ? И возможно ли это в принципе?
     
  6. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    LoadModule/GetProcAddress
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    RamMerLabs
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Ну скажите уже, что это невозможно, если это невозможно. Ответ "не знаю" тоже принимается.