Как я могу получить доступ к объекту службы Windows с помощью другой программы - PullRequest
1 голос
/ 03 сентября 2010

У меня есть служба Windows, которая создает именованный канал в своей основной функции службы.Ниже приведен фрагмент кода:

void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{
  DWORD status;
  DWORD specificError;
  m_ServiceStatus.dwServiceType = SERVICE_WIN32;
  m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
  m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
  m_ServiceStatus.dwWin32ExitCode = 0;
  m_ServiceStatus.dwServiceSpecificExitCode = 0;
  m_ServiceStatus.dwCheckPoint = 0;
  m_ServiceStatus.dwWaitHint = 0;

  m_ServiceStatusHandle = RegisterServiceCtrlHandler("myService", 
                                            ServiceCtrlHandler); 
  if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
  {
    return;
  }
  m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  m_ServiceStatus.dwCheckPoint = 0;
  m_ServiceStatus.dwWaitHint = 0;
  if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
  {
  }

    CraeteNamedPipe();

     return;
}

Функция CraeteNamedPipe создает именованный канал \\.\pipe\1stPipe.

Я могу успешно установить и запустить свой сервис на моем компьютере с XP.
Теперь, как я могу получить доступ к namedpipe \\.\pipe\1stPipe с помощью другой программы.

Любой фрагмент кода или образецстатья будет полезна.

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Надеюсь, вы не только используете CreateNamedPipe , но и ConnectNamedPipe . Также очень важно установить Безопасность и права доступа для канала (см. lpSecurityAttributes параметр CreateNamedPipe ), чтобы иметь возможность взаимодействовать с каналом, созданным другим пользователем (обычно Ситуация, если вы создаете канал внутри службы Windows и используете вне службы).

Для подключения к каналу со стороны клиента можно использовать CreateFile или CallNamedPipe в зависимости от режима (см. Также Можете ли вы объясните более подробно, в чем разница между PIPE_READMODE_MESSAGE / PIPE_READMODE_BYTE? ).

В канале типа сообщения обычно используется CallNamedPipe или TransactNamedPipe (см. http://msdn.microsoft.com/en-us/library/aa365789.aspx в качестве примера). В канале байтового типа используется стандартная операция чтения / записи файла в отношении ReadFile и WriteFile .

Другой пример использования труб вы можете найти здесь .

0 голосов
/ 03 сентября 2010

Быстрый поиск дал мне эти результаты:

  1. http://ist.marshall.edu/ist480acp/namedpipes.html

  2. http://www.codeguru.com/cpp/w-p/system/sharedmemory/article.php/c5771

Помогите ли тесовсем?

* (я только взглянул на них, и у меня нет опыта работы с трубами)

...