独立したログ ビューアーと、名前付きパイプ経由でメッセージを送信するための C++ ライブラリで構成されるログ機能 (SS_Log の子孫) があります。
ログ ビューアは、最初のメッセージがログに記録されるときに、C++ ライブラリを介してクライアントによって起動されます。
HANDLE hPipe = CreateNamedPipe( szPipeName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE|PIPE_WAIT|PIPE_READMODE_MESSAGE,
PIPE_UNLIMITED_INSTANCES,
SSLOG_MAX_MESSAGE_LENGTH,
0, 5000, &sa );
pView->Pipe(hPipe);
if( pView->Pipe() == INVALID_HANDLE_VALUE )
{
pView->MessageBox( _T("Could not create the pipe for incoming messages. No messages can be received. "),
_T("Fatal Error"), MB_OK|MB_ICONSTOP );
return FALSE;
}
// now we loop forever, waiting for messages. As they come in, send them
// to the SS_Log_WindowView::EraseLog() and SS_Log_WindowView::WriteLog()
// functions as appropriate.
while( TRUE )
{
ConnectNamedPipe( pView->Pipe(), NULL );
...
}
クライアントがメッセージを送信したい場合、送信します
BOOL bResult = WaitNamedPipe(WindowPipeName(), 20000);
bResult = CallNamedPipe(WindowPipeName(), (LPVOID)szFinalBuffer,
_tcslen(szFinalBuffer)+1, (LPVOID)NULL,
0, &dwBytesRead,
5000);
この名前付きパイプに対応する HANDLE を取得したいと考えています。ドキュメントは、を使用して作成できることを示唆していCreateFile( WindowPipeName(), GENERIC_READ|GENERIC_WRITE,...OPEN_EXISTING,...)
ます。これを行うと、明らかに何かがブロックされ始め、ログ ビューアーはメッセージを受信しなくなります。そして、それはその HANDLE で何もしなくてもです。
私がやりたいことをすることは可能ですか?