[NPFS] Magic--;
[reactos.git] / drivers / filesystems / npfs / create.c
index d1b6479..8efcd77 100644 (file)
@@ -96,7 +96,7 @@ NpOpenNamedPipeRootDirectory(IN PNP_DCB Dcb,
         IoStatus.Information = 0;
     }
 
-    TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+    TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
     return IoStatus;
 }
 
@@ -122,7 +122,6 @@ NpCreateClientEnd(IN PNP_FCB Fcb,
     PNP_CCB Ccb = NULL;
     TRACE("Entered\n");
 
-    IoStatus.Status = STATUS_SUCCESS;
     IoStatus.Information = 0;
     Privileges = NULL;
 
@@ -172,7 +171,7 @@ NpCreateClientEnd(IN PNP_FCB Fcb,
         ((GrantedAccess & FILE_WRITE_DATA) && (NamedPipeConfiguration == FILE_PIPE_OUTBOUND)))
     {
         IoStatus.Status = STATUS_ACCESS_DENIED;
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
@@ -191,7 +190,7 @@ NpCreateClientEnd(IN PNP_FCB Fcb,
     if (NextEntry == ListHead)
     {
         IoStatus.Status = STATUS_PIPE_NOT_AVAILABLE;
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
@@ -202,7 +201,7 @@ NpCreateClientEnd(IN PNP_FCB Fcb,
     if (!NT_SUCCESS(IoStatus.Status))
     {
         NpUninitializeSecurity(Ccb);
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
@@ -211,7 +210,7 @@ NpCreateClientEnd(IN PNP_FCB Fcb,
 
     IoStatus.Information = FILE_OPENED;
     IoStatus.Status = STATUS_SUCCESS;
-    TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+    TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
     return IoStatus;
 }
 
@@ -362,7 +361,7 @@ NpFsdCreate(IN PDEVICE_OBJECT DeviceObject,
             IN PIRP Irp)
 {
     IO_STATUS_BLOCK IoStatus;
-    PEXTENDED_IO_STACK_LOCATION IoStack;
+    PIO_STACK_LOCATION IoStack;
     UNICODE_STRING FileName;
     PFILE_OBJECT FileObject;
     PFILE_OBJECT RelatedFileObject;
@@ -373,21 +372,19 @@ NpFsdCreate(IN PDEVICE_OBJECT DeviceObject,
     ACCESS_MASK DesiredAccess;
     LIST_ENTRY DeferredList;
     UNICODE_STRING Prefix;
-    NTSTATUS Status;
     TRACE("Entered\n");
 
     InitializeListHead(&DeferredList);
-    IoStack = (PEXTENDED_IO_STACK_LOCATION)IoGetCurrentIrpStackLocation(Irp);
+    IoStack = IoGetCurrentIrpStackLocation(Irp);
     FileObject = IoStack->FileObject;
     RelatedFileObject = FileObject->RelatedFileObject;
     FileName = FileObject->FileName;
     DesiredAccess = IoStack->Parameters.CreatePipe.SecurityContext->DesiredAccess;
 
     IoStatus.Information = 0;
-    IoStatus.Status = STATUS_SUCCESS;
 
     FsRtlEnterFileSystem();
-    ExAcquireResourceExclusiveLite(&NpVcb->Lock, TRUE);
+    NpAcquireExclusiveVcb();
 
     if (RelatedFileObject)
     {
@@ -428,8 +425,8 @@ NpFsdCreate(IN PDEVICE_OBJECT DeviceObject,
         goto Quickie;
     }
 
-    Status = NpTranslateAlias(&FileName);
-    if (!NT_SUCCESS(Status)) goto Quickie;
+    IoStatus.Status = NpTranslateAlias(&FileName);
+    if (!NT_SUCCESS(IoStatus.Status)) goto Quickie;
 
     if (RelatedFileObject)
     {
@@ -465,7 +462,7 @@ NpFsdCreate(IN PDEVICE_OBJECT DeviceObject,
             goto Quickie;
         }
 
-        Fcb = NpFindPrefix(&FileName, TRUE, &Prefix);
+        Fcb = NpFindPrefix(&FileName, 1, &Prefix);
     }
 
     if (Prefix.Length)
@@ -502,7 +499,7 @@ NpFsdCreate(IN PDEVICE_OBJECT DeviceObject,
                                  &DeferredList);
 
 Quickie:
-    ExReleaseResourceLite(&NpVcb->Lock);
+    NpReleaseVcb();
     NpCompleteDeferredIrps(&DeferredList);
     FsRtlExitFileSystem();
 
@@ -543,6 +540,8 @@ NpCreateExistingNamedPipe(IN PNP_FCB Fcb,
     SubjectSecurityContext = &AccessState->SubjectSecurityContext;
     SeLockSubjectContext(SubjectSecurityContext);
 
+    IoStatus.Information = 0;
+
     AccessGranted = SeAccessCheck(Fcb->SecurityDescriptor,
                                   SubjectSecurityContext,
                                   TRUE,
@@ -563,7 +562,7 @@ NpCreateExistingNamedPipe(IN PNP_FCB Fcb,
     if (AccessGranted)
     {
         AccessState->PreviouslyGrantedAccess |= GrantedAccess;
-        AccessState->RemainingDesiredAccess &= ~(GrantedAccess | 0x2000000);
+        AccessState->RemainingDesiredAccess &= ~(GrantedAccess | MAXIMUM_ALLOWED);
     }
 
     ObjectTypeName.Buffer = L"NamedPipe";
@@ -581,21 +580,21 @@ NpCreateExistingNamedPipe(IN PNP_FCB Fcb,
     SeUnlockSubjectContext(SubjectSecurityContext);
     if (!AccessGranted)
     {
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
     if (Fcb->CurrentInstances >= Fcb->MaximumInstances)
     {
         IoStatus.Status = STATUS_INSTANCE_NOT_AVAILABLE;
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
     if (Disposition == FILE_CREATE)
     {
         IoStatus.Status = STATUS_ACCESS_DENIED;
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
@@ -616,7 +615,7 @@ NpCreateExistingNamedPipe(IN PNP_FCB Fcb,
     if (CheckShareAccess != ShareAccess)
     {
         IoStatus.Status = STATUS_ACCESS_DENIED;
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
@@ -638,7 +637,7 @@ NpCreateExistingNamedPipe(IN PNP_FCB Fcb,
     {
         --Ccb->Fcb->CurrentInstances;
         NpDeleteCcb(Ccb, List);
-        TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+        TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
         return IoStatus;
     }
 
@@ -647,8 +646,8 @@ NpCreateExistingNamedPipe(IN PNP_FCB Fcb,
     NpCheckForNotify(Fcb->ParentDcb, 0, List);
 
     IoStatus.Status = STATUS_SUCCESS;
-    IoStatus.Information = 1;
-    TRACE("Leaving, IoStatus = %lx\n", IoStatus);
+    IoStatus.Information = FILE_OPENED;
+    TRACE("Leaving, IoStatus.Status = %lx\n", IoStatus.Status);
     return IoStatus;
 }
 
@@ -664,7 +663,7 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
                      IN PNAMED_PIPE_CREATE_PARAMETERS Parameters,
                      IN PEPROCESS Process,
                      IN PLIST_ENTRY List,
-                     IN PIO_STATUS_BLOCK IoStatus)
+                     OUT PIO_STATUS_BLOCK IoStatus)
 {
     NTSTATUS Status;
     USHORT NamedPipeConfiguration;
@@ -677,7 +676,7 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
 
     if (!(Parameters->TimeoutSpecified) ||
         !(Parameters->MaximumInstances) ||
-        (Parameters->DefaultTimeout.HighPart >= 0))
+        (Parameters->DefaultTimeout.QuadPart >= 0))
     {
         Status = STATUS_INVALID_PARAMETER;
         goto Quickie;
@@ -707,7 +706,8 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
         goto Quickie;
     }
 
-    if (!Parameters->NamedPipeType && Parameters->ReadMode == 1)
+    if (Parameters->NamedPipeType == FILE_PIPE_BYTE_STREAM_TYPE &&
+        Parameters->ReadMode == FILE_PIPE_MESSAGE_MODE)
     {
         Status = STATUS_INVALID_PARAMETER;
         goto Quickie;
@@ -737,12 +737,12 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
     }
 
     SecurityContext = &AccessState->SubjectSecurityContext;
-    SeLockSubjectContext(&AccessState->SubjectSecurityContext);
+    SeLockSubjectContext(SecurityContext);
 
-    Status = SeAssignSecurity(0,
+    Status = SeAssignSecurity(NULL,
                               AccessState->SecurityDescriptor,
                               &SecurityDescriptor,
-                              0,
+                              FALSE,
                               SecurityContext,
                               IoGetFileObjectGenericMapping(),
                               PagedPool);
@@ -757,7 +757,7 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
     Status = ObLogSecurityDescriptor(SecurityDescriptor,
                                      &CachedSecurityDescriptor,
                                      1);
-    ExFreePool(SecurityDescriptor);
+    ExFreePoolWithTag(SecurityDescriptor, 0);
 
     if (!NT_SUCCESS(Status))
     {
@@ -791,7 +791,7 @@ NTAPI
 NpFsdCreateNamedPipe(IN PDEVICE_OBJECT DeviceObject,
                      IN PIRP Irp)
 {
-    PEXTENDED_IO_STACK_LOCATION IoStack;
+    PIO_STACK_LOCATION IoStack;
     PFILE_OBJECT FileObject;
     PFILE_OBJECT RelatedFileObject;
     USHORT Disposition, ShareAccess;
@@ -807,7 +807,7 @@ NpFsdCreateNamedPipe(IN PDEVICE_OBJECT DeviceObject,
     InitializeListHead(&DeferredList);
     Process = IoGetRequestorProcess(Irp);
 
-    IoStack = (PEXTENDED_IO_STACK_LOCATION) IoGetCurrentIrpStackLocation(Irp);
+    IoStack = IoGetCurrentIrpStackLocation(Irp);
     FileObject = IoStack->FileObject;
     RelatedFileObject = FileObject->RelatedFileObject;
 
@@ -817,7 +817,6 @@ NpFsdCreateNamedPipe(IN PDEVICE_OBJECT DeviceObject,
 
     FileName = FileObject->FileName;
 
-    IoStatus.Status = STATUS_SUCCESS;
     IoStatus.Information = 0;
 
     FsRtlEnterFileSystem();
@@ -854,7 +853,7 @@ NpFsdCreateNamedPipe(IN PDEVICE_OBJECT DeviceObject,
             goto Quickie;
         }
 
-        Fcb = NpFindPrefix(&FileName, TRUE, &Prefix);
+        Fcb = NpFindPrefix(&FileName, 1, &Prefix);
     }
 
     if (Prefix.Length)