+static
+DWORD
+ScmCreatePipeSD(VOID)
+{
+ NTSTATUS Status;
+
+ /* Create the absolute security descriptor */
+ pPipeSD = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SECURITY_DESCRIPTOR));
+ if (pPipeSD == NULL)
+ return ERROR_OUTOFMEMORY;
+
+ DPRINT("pPipeSD %p\n", pDefaultSD);
+
+ Status = RtlCreateSecurityDescriptor(pPipeSD,
+ SECURITY_DESCRIPTOR_REVISION);
+ if (!NT_SUCCESS(Status))
+ return RtlNtStatusToDosError(Status);
+
+ Status = RtlSetOwnerSecurityDescriptor(pPipeSD,
+ pLocalSystemSid,
+ FALSE);
+ if (!NT_SUCCESS(Status))
+ return RtlNtStatusToDosError(Status);
+
+ Status = RtlSetGroupSecurityDescriptor(pPipeSD,
+ pLocalSystemSid,
+ FALSE);
+ if (!NT_SUCCESS(Status))
+ return RtlNtStatusToDosError(Status);
+
+ Status = RtlSetDaclSecurityDescriptor(pPipeSD,
+ TRUE,
+ pPipeDacl,
+ FALSE);
+ if (!NT_SUCCESS(Status))
+ return RtlNtStatusToDosError(Status);
+
+ return ERROR_SUCCESS;
+}
+
+
+static
+VOID
+ScmFreePipeSD(VOID)
+{
+ if (pPipeSD != NULL)
+ RtlFreeHeap(RtlGetProcessHeap(), 0, pPipeSD);
+}
+
+