Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
NamedPipe.cpp
[詳解]
1// ----------------------------------------------------------------------------
6
7#include "pch.h"
8#include "NamedPipe.h"
9
10using namespace alt;
11
12BOOL NamedPipe::Create (LPCTSTR lpctszName, BOOL bStreamMode)
13{
14 BOOL ret = TRUE;
15 TCHAR tszPipeName[MAX_PATH];
16 // PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND, PIPE_ACCESS_DUPLEX
17 // FILE_FLAG_WRITE_THROUGH バイトタイプ&端点がリモートPCの時のみ有効
18 // FILE_FLAG_OVERLAPPED 非同期モード
19 DWORD dwOpenMode = PIPE_ACCESS_DUPLEX;
20 // PIPE_TYPE_BYTE 通常のバイナリ操作
21 // PIPE_TYPE_MESSAGE 一度に一文
22 // PIPE_READMODE_BYTE バイトストリーム
23 // PIPE_READMODE_MESSAGE メッセージストリーム
24 // PIPE_WAIT 完了するまで制御を返さない
25 // PIPE_NO_WAIT ReadFile, WriteFile, ConnectNamedPipeは制御をすぐ返す
26 DWORD dwPipeMode =
27 bStreamMode == FALSE ? PIPE_TYPE_BYTE | PIPE_READMODE_BYTE :
28 PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE;
29 DWORD dwMaxInstance = PIPE_UNLIMITED_INSTANCES;
30 DWORD dwOutBuffSize = USHRT_MAX;
31 DWORD dwInBufSize = USHRT_MAX;
32 DWORD dwDefaultTimeOut = SHRT_MAX;
33
34 wsprintf (tszPipeName, PIPE_NAME_FORMAT, lpctszName);
35
36 _hObject = ::CreateNamedPipe (
37 tszPipeName, dwOpenMode, dwPipeMode, dwMaxInstance, dwOutBuffSize,
38 dwInBufSize, dwDefaultTimeOut, NULL);
39 if (_hObject == INVALID_HANDLE_VALUE)
40 {
41 ret = FALSE;
42 }
43
44 return ret;
45}
46
47BOOL NamedPipe::Connect () const
48{
49 return ::ConnectNamedPipe (_hObject, NULL);
50}
51
53{
54 return ::DisconnectNamedPipe (_hObject);
55}
56
57BOOL NamedPipe::Open (LPCTSTR lpctszName)
58{
59 BOOL ret = TRUE;
60 TCHAR tszPipeName[MAX_PATH];
61
62 wsprintf (tszPipeName, PIPE_NAME_FORMAT, lpctszName);
63
64 _hObject = ::CreateFile (
65 tszPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
66 FILE_ATTRIBUTE_NORMAL, NULL);
67 if (_hObject == INVALID_HANDLE_VALUE)
68 {
69 ret = FALSE;
70 }
71
72 return ret;
73}
74
75BOOL NamedPipe::Wait (LPCTSTR lpctszName, DWORD dwTimeout) const
76{
77 TCHAR tszPipeName[MAX_PATH];
78
79 wsprintf (tszPipeName, PIPE_NAME_FORMAT, lpctszName);
80
81 return ::WaitNamedPipe (tszPipeName, dwTimeout);
82}
83
84DWORD NamedPipe::PeekData (LPVOID lpvData, DWORD dwSize) const
85{
86 DWORD dwBytesRead;
87 BOOL ret;
88
89 ret = ::PeekNamedPipe (
90 _hObject, lpvData, dwSize, &dwBytesRead, NULL, NULL);
91
92 return ret == TRUE ? dwBytesRead : (DWORD)(-1);
93}
94
96{
97 DWORD dwTotalBytesAvail;
98 BOOL ret;
99
100 ret = ::PeekNamedPipe (_hObject, NULL, 0, NULL, &dwTotalBytesAvail, NULL);
101
102 return ret == FALSE ? -1 : dwTotalBytesAvail;
103}
名前付きパイプに関するWindowsAPIを集約したクラス
#define PIPE_NAME_FORMAT
Definition: NamedPipe.h:11
プリコンパイル済みヘッダー ファイルです。
HANDLE _hObject
ハンドルを使用するWindowsAPIで保持するHANDLE値
BOOL APIENTRY Open(LPCTSTR lpctszName)
パイプをオープンします。
Definition: NamedPipe.cpp:57
BOOL APIENTRY Connect() const
サーバー側でクライアント接続を待機します。
Definition: NamedPipe.cpp:47
BOOL APIENTRY Wait(LPCTSTR lpctszName, DWORD dwTimeout=NMPWAIT_USE_DEFAULT_WAIT) const
クライアント側でサーバー接続を待機します。
Definition: NamedPipe.cpp:75
DWORD APIENTRY PeekRemain() const
バッファ内に残っているメッセージサイズを取得します。
Definition: NamedPipe.cpp:95
BOOL APIENTRY Create(LPCTSTR lpctszName, BOOL bStreamMode)
パイプを作成します。
Definition: NamedPipe.cpp:12
DWORD APIENTRY PeekData(LPVOID lpvData, DWORD dwSize) const
メッセージ内容を取り出さずに読み取ります。
Definition: NamedPipe.cpp:84
BOOL APIENTRY Disconnect() const
サーバー側でクライアント接続を切断します。
Definition: NamedPipe.cpp:52
Definition: DBLibrary.h:12