142 lines
2.7 KiB
C
142 lines
2.7 KiB
C
|
/*++
|
|||
|
|
|||
|
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
|