windows-nt/Source/XPSP1/NT/net/streams/winstrm/openstrm.c

142 lines
2.7 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
openstrm.c
Abstract:
This module implements the STREAMS APIs, s_open() and OpenStream().
Author:
Sam Patton (sampa) November, 1991
Eric Chin (ericc) July 17, 1992
Revision History:
--*/
#include "common.h"
HANDLE
s_open(
IN char *path,
IN int oflag,
IN int ignored
)
/*++
Routine Description:
This function opens a stream.
Arguments:
path - path to the STREAMS driver
oflag - currently ignored. In the future, O_NONBLOCK will be
relevant.
ignored - not used
Return Value:
An NT handle for the stream, or INVALID_HANDLE_VALUE if unsuccessful.
--*/
{
HANDLE StreamHandle;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
STRING name_string;
UNICODE_STRING uc_name_string;
PFILE_FULL_EA_INFORMATION EaBuffer;
char Buffer[sizeof(FILE_FULL_EA_INFORMATION) + NORMAL_STREAM_EA_LENGTH + 1];
NTSTATUS Status;
RtlInitString(&name_string, path);
RtlAnsiStringToUnicodeString(&uc_name_string, &name_string, TRUE);
InitializeObjectAttributes(
&ObjectAttributes,
&uc_name_string,
OBJ_CASE_INSENSITIVE,
(HANDLE) NULL,
(PSECURITY_DESCRIPTOR) NULL
);
EaBuffer = (PFILE_FULL_EA_INFORMATION) Buffer;
EaBuffer->NextEntryOffset = 0;
EaBuffer->Flags = 0;
EaBuffer->EaNameLength = NORMAL_STREAM_EA_LENGTH;
EaBuffer->EaValueLength = 0;
RtlMoveMemory(
EaBuffer->EaName,
NormalStreamEA,
NORMAL_STREAM_EA_LENGTH + 1);
Status =
NtCreateFile(
&StreamHandle,
SYNCHRONIZE | FILE_READ_DATA | FILE_WRITE_DATA,
&ObjectAttributes,
&IoStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ | FILE_SHARE_WRITE,
FILE_OPEN_IF,
0,
EaBuffer,
sizeof(FILE_FULL_EA_INFORMATION) - 1 +
EaBuffer->EaNameLength + 1);
RtlFreeUnicodeString(&uc_name_string);
if (Status != STATUS_SUCCESS) {
SetLastError(MapNtToPosixStatus(Status));
return(INVALID_HANDLE_VALUE);
} else {
return(StreamHandle);
}
} // s_open
HANDLE
OpenStream(
IN char *AdapterName
)
/*++
Routine Description:
This function is used by the TCP/IP Utilities to open STREAMS drivers.
It was exported by the winstrm.dll included in the July, 1992 PDC
release. Hence, it will continue to be exported by winstrm.dll.
Arguments:
AdapterName - path of the STREAMS driver
Return Value:
An NT handle, or INVALID_HANDLE_VALUE if unsuccessful.
--*/
{
return( s_open(AdapterName, 2, 0) );
} // OpenStream