Pass create parameters for named pipes and mailslots in the stack location.

svn path=/trunk/; revision=12306
This commit is contained in:
Eric Kohl
2004-12-23 23:56:33 +00:00
parent 630b572695
commit 9b7ba3e6fb
2 changed files with 43 additions and 32 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
/* $Id: create.c,v 1.6 2004/11/01 22:54:23 ion Exp $
/* $Id: create.c,v 1.7 2004/12/23 23:56:33 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@@ -122,7 +122,7 @@ MsfsCreateMailslot(PDEVICE_OBJECT DeviceObject,
IoStack = IoGetCurrentIrpStackLocation(Irp);
DeviceExtension = DeviceObject->DeviceExtension;
FileObject = IoStack->FileObject;
Buffer = (PMAILSLOT_CREATE_PARAMETERS)Irp->Tail.Overlay.AuxiliaryBuffer;
Buffer = IoStack->Parameters.CreateMailslot.Parameters;
DPRINT("Mailslot name: %wZ\n", &FileObject->FileName);
+41 -30
View File
@@ -1,4 +1,4 @@
/* $Id: create.c,v 1.75 2004/10/22 20:25:52 ekohl Exp $
/* $Id: create.c,v 1.76 2004/12/23 23:55:56 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@@ -367,7 +367,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
if (!NT_SUCCESS(Status))
{
DPRINT("ObCreateObject() failed! (Status %lx)\n", Status);
return(Status);
return Status;
}
RtlMapGenericMask(&DesiredAccess,
@@ -383,7 +383,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
{
DPRINT("ObInsertObject() failed! (Status %lx)\n", Status);
ObDereferenceObject (FileObject);
return(Status);
return Status;
}
if (CreateOptions & FILE_SYNCHRONOUS_IO_ALERT)
@@ -395,7 +395,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
FileObject->Flags |= FO_SYNCHRONOUS_IO;
}
if( CreateOptions & FILE_NO_INTERMEDIATE_BUFFERING )
if (CreateOptions & FILE_NO_INTERMEDIATE_BUFFERING)
FileObject->Flags |= FO_NO_INTERMEDIATE_BUFFERING;
SecurityContext.SecurityQos = NULL; /* ?? */
@@ -417,7 +417,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
if (Irp == NULL)
{
ZwClose(*FileHandle);
return (STATUS_UNSUCCESSFUL);
return STATUS_UNSUCCESSFUL;
}
//trigger FileObject/Event dereferencing
@@ -425,7 +425,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
Irp->RequestorMode = PreviousMode;
Irp->UserIosb = IoStatusBlock;
Irp->AssociatedIrp.SystemBuffer = EaBuffer;
Irp->Tail.Overlay.AuxiliaryBuffer = (PCHAR)ExtraCreateParameters;
Irp->Tail.Overlay.AuxiliaryBuffer = NULL;
Irp->Tail.Overlay.Thread = PsGetCurrentThread();
Irp->UserEvent = &FileObject->Event;
if (AllocationSize)
@@ -438,35 +438,46 @@ IoCreateFile(OUT PHANDLE FileHandle,
* IRP and prepare it.
*/
StackLoc = IoGetNextIrpStackLocation(Irp);
switch (CreateFileType)
{
default:
case CreateFileTypeNone:
StackLoc->MajorFunction = IRP_MJ_CREATE;
break;
case CreateFileTypeNamedPipe:
StackLoc->MajorFunction = IRP_MJ_CREATE_NAMED_PIPE;
break;
case CreateFileTypeMailslot:
StackLoc->MajorFunction = IRP_MJ_CREATE_MAILSLOT;
break;
}
StackLoc->MinorFunction = 0;
StackLoc->Flags = (UCHAR)Options;
StackLoc->Control = 0;
StackLoc->DeviceObject = FileObject->DeviceObject;
StackLoc->FileObject = FileObject;
StackLoc->Parameters.Create.SecurityContext = &SecurityContext;
StackLoc->Parameters.Create.Options = (CreateOptions & FILE_VALID_OPTION_FLAGS);
StackLoc->Parameters.Create.Options |= (CreateDisposition << 24);
StackLoc->Parameters.Create.FileAttributes = (USHORT)FileAttributes;
StackLoc->Parameters.Create.ShareAccess = (USHORT)ShareAccess;
StackLoc->Parameters.Create.EaLength = EaLength;
switch (CreateFileType)
{
default:
case CreateFileTypeNone:
StackLoc->MajorFunction = IRP_MJ_CREATE;
StackLoc->Parameters.Create.SecurityContext = &SecurityContext;
StackLoc->Parameters.Create.Options = (CreateOptions & FILE_VALID_OPTION_FLAGS);
StackLoc->Parameters.Create.Options |= (CreateDisposition << 24);
StackLoc->Parameters.Create.FileAttributes = (USHORT)FileAttributes;
StackLoc->Parameters.Create.ShareAccess = (USHORT)ShareAccess;
StackLoc->Parameters.Create.EaLength = EaLength;
break;
case CreateFileTypeNamedPipe:
StackLoc->MajorFunction = IRP_MJ_CREATE_NAMED_PIPE;
StackLoc->Parameters.CreatePipe.SecurityContext = &SecurityContext;
StackLoc->Parameters.CreatePipe.Options = (CreateOptions & FILE_VALID_OPTION_FLAGS);
StackLoc->Parameters.CreatePipe.Options |= (CreateDisposition << 24);
StackLoc->Parameters.CreatePipe.ShareAccess = (USHORT)ShareAccess;
StackLoc->Parameters.CreatePipe.Parameters = ExtraCreateParameters;
break;
case CreateFileTypeMailslot:
StackLoc->MajorFunction = IRP_MJ_CREATE_MAILSLOT;
StackLoc->Parameters.CreateMailslot.SecurityContext = &SecurityContext;
StackLoc->Parameters.CreateMailslot.Options = (CreateOptions & FILE_VALID_OPTION_FLAGS);
StackLoc->Parameters.CreateMailslot.Options |= (CreateDisposition << 24);
StackLoc->Parameters.CreateMailslot.ShareAccess = (USHORT)ShareAccess;
StackLoc->Parameters.CreateMailslot.Parameters = ExtraCreateParameters;
break;
}
/*
* Now call the driver and
* Now call the driver and
* possibly wait if it can
* not complete the request
* immediately.
@@ -495,7 +506,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
DPRINT("Finished IoCreateFile() (*FileHandle) %x\n", (*FileHandle));
return (Status);
return Status;
}