mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
2.7 KiB
141 lines
2.7 KiB
/*++
|
|
|
|
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
|