TransactNamedPipe
The TransactNamedPipe
function combines into a single network operation the functions that write a
message to and read a message from the specified named pipe.
BOOL TransactNamedPipe(
HANDLE hNamedPipe, |
// handle of named
pipe |
LPVOID lpInBuffer, |
// address of write
buffer |
DWORD nInBufferSize, |
// size of the
write buffer, in bytes |
LPVOID lpOutBuffer, |
// address of read
buffer |
DWORD nOutBufferSize, |
// size of read
buffer, in bytes |
LPDWORD lpBytesRead, |
// address of
variable for bytes actually read |
LPOVERLAPPED lpOverlapped |
// address of
overlapped structure |
); |
|
Parameters
hNamedPipe
Identifies
the named pipe returned by the CreateNamedPipe21DZYT or CreateFile function.
lpInBuffer
Points to the
buffer containing the data written to the pipe.
nInBufferSize
Specifies the
size, in bytes, of the write buffer.
lpOutBuffer
Points to the
buffer that receives the data read from the pipe.
nOutBufferSize
Specifies the
size, in bytes, of the read buffer.
lpBytesRead
Points to the
variable that receives the number of bytes read from the pipe.
If lpOverlapped
is NULL, lpBytesRead cannot be NULL.
If lpOverlapped
is not NULL, lpBytesRead can be NULL. If this is an overlapped read operation,
you can get the number of bytes read by calling GetOverlappedResult
lpOverlapped
Points to an OVERLAPPED
If hNamedPipe
was opened with FILE_FLAG_OVERLAPPED, the lpOverlapped parameter must
not be NULL. It must point to a valid OVERLAPPED structure. If hNamedPipe
was created with FILE_FLAG_OVERLAPPED and lpOverlapped is NULL, the
function can incorrectly report that the opeation is complete.
If hNamePipe was opened with FILE_FLAG_OVERLAPPED and lpOverlapped
is not NULL, TransactNamedPipe is executed as an overlapped operation.
The OVERLAPPED structure should contain a manual-reset event object
(which can be created by using the CreateEventJ_ZBJV function). If the operation cannot be
completed immediately, TransactNamedPipe returns FALSE and GetLastError
returns ERROR_IO_PENDING. In this situation, the event object is set to the
nonsignaled state before TransactNamedPipe returns, and it is set to the
signaled state when the transaction has finished. For more information about
overlapped operations, see Pipes .
If hNamedPipe was not opened with FILE_FLAG_OVERLAPPED, TransactNamedPipe
does not return until the operation is complete.
Return Values
If the
function succeeds, the return value is nonzero.
If the
function fails, the return value is zero. To get extended error information,
call GetLastError
Remarks
TransactNamedPipe fails if the server did not create the pipe as a
message-type pipe or if the pipe handle is not in message-read mode. For
example, if a client is running on the same machine as the server and uses the \\.\pipe\pipename
format to open the pipe, the pipe is opened in byte mode by the named pipe file
system (NPFS). If the client uses the form \\server\pipe\pipename,
the redirector opens the pipe in message mode. A byte mode pipe handle can be
changed to message-read mode with the SetNamedPipeHandleState
The function
cannot be completed successfully until data is written into the buffer
specified by the lpOutBuffer parameter. The lpOverlapped
parameter is available to enable the calling thread to perform other tasks
while the operation is executing in the background.
If the
message to be read is longer than the buffer specified by the nOutBufferSize
parameter, TransactNamedPipe returns FALSE and the GetLastError
function returns ERROR_MORE_DATA. The remainder of the message can be read by a
subsequent call to ReadFile, ReadFileEx, or PeekNamedPipe.
See Also