Create a branch for working on csrss and co.
[reactos.git] / reactos / lib / smlib / lookupss.c
diff --git a/reactos/lib/smlib/lookupss.c b/reactos/lib/smlib/lookupss.c
deleted file mode 100644 (file)
index 8a3e6b6..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* $Id$
- *
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS system libraries
- * FILE:            lib/smlib/lookupss.c
- */
-#include "precomp.h"
-
-#define NDEBUG
-#include <debug.h>
-
-/**********************************************************************
- * NAME                                                        EXPORTED
- *     SmLookupSubsystem/6
- *
- * DESCRIPTION
- *     Read from the registry key
- *     \Registry\SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems
- *     the value which name is Name.
- *
- * ARGUMENTS
- *     Name: name of the program to run, that is a value's name in
- *           the SM registry key Subsystems;
- *     Data: what the registry gave back for Name;
- *     DataLength: how much Data the registry returns;
- *     DataType: what is Data?
- *     Environment: set it if you want this function to use it
- *           to possibly expand Data before giving it back; if set
- *           to NULL, no expansion will be performed.
- */
-NTSTATUS WINAPI
-SmLookupSubsystem (IN     PWSTR   Name,
-                  IN OUT PWSTR   Data,
-                  IN OUT PULONG  DataLength,
-                  IN OUT PULONG  DataType,
-                  IN     PVOID   Environment OPTIONAL)
-{
-       NTSTATUS           Status = STATUS_SUCCESS;
-       UNICODE_STRING     usKeyName = { 0, 0, NULL };
-       OBJECT_ATTRIBUTES  Oa = {0};
-       HANDLE             hKey = (HANDLE) 0;
-
-       DPRINT("SM: %s(Name='%S') called\n", __FUNCTION__, Name);
-       /*
-        * Prepare the key name to scan and
-        * related object attributes.
-        */
-       RtlInitUnicodeString (& usKeyName,
-               L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\SubSystems");
-
-       InitializeObjectAttributes (& Oa,
-                                   & usKeyName,
-                                   OBJ_CASE_INSENSITIVE,
-                                   NULL,
-                                   NULL);
-       /*
-        * Open the key. This MUST NOT fail, if the
-        * request is for a legitimate subsystem.
-        */
-       Status = NtOpenKey (& hKey,
-                             MAXIMUM_ALLOWED,
-                             & Oa);
-       if(NT_SUCCESS(Status))
-       {
-               UNICODE_STRING usValueName = { 0, 0, NULL };
-               PWCHAR         KeyValueInformation = NULL;
-               ULONG          KeyValueInformationLength = 1024;
-               ULONG          ResultLength = 0L;
-               PKEY_VALUE_PARTIAL_INFORMATION kvpi = NULL;
-
-               KeyValueInformation = RtlAllocateHeap (RtlGetProcessHeap(),
-                                                      0,
-                                                      KeyValueInformationLength);
-               if (NULL == KeyValueInformation)
-               {
-                       return STATUS_NO_MEMORY;
-               }
-               kvpi = (PKEY_VALUE_PARTIAL_INFORMATION) KeyValueInformation;
-               RtlInitUnicodeString (& usValueName, Name);
-               Status = NtQueryValueKey (hKey,
-                                         & usValueName,
-                                         KeyValuePartialInformation,
-                                         KeyValueInformation,
-                                         KeyValueInformationLength,
-                                         & ResultLength);
-               if(NT_SUCCESS(Status))
-               {
-                       DPRINT("nkvpi.TitleIndex = %ld\n", kvpi->TitleIndex);
-                       DPRINT("kvpi.Type        = %ld\n", kvpi->Type);
-                       DPRINT("kvpi.DataLength  = %ld\n", kvpi->DataLength);
-
-                       if((NULL != Data) && (NULL != DataLength) && (NULL != DataType))
-                       {
-                               *DataType = kvpi->Type;
-                               if((NULL != Environment) && (REG_EXPAND_SZ == *DataType))
-                               {
-                                       UNICODE_STRING Source;
-                                       PWCHAR         DestinationBuffer = NULL;
-                                       UNICODE_STRING Destination;
-                                       ULONG          Length = 0;
-
-                                       DPRINT("SM: %s: value will be expanded\n", __FUNCTION__);
-
-                                       DestinationBuffer = RtlAllocateHeap (RtlGetProcessHeap(),
-                                                                            0,
-                                                                            (2 * KeyValueInformationLength));
-                                       if (NULL == DestinationBuffer)
-                                       {
-                                               Status = STATUS_NO_MEMORY;
-                                       }
-                                       else
-                                       {
-                                               Source.Length        = kvpi->DataLength;
-                                               Source.MaximumLength = kvpi->DataLength;
-                                               Source.Buffer        = (PWCHAR) & kvpi->Data;
-
-                                               Destination.Length        = 0;
-                                               Destination.MaximumLength = (2 * KeyValueInformationLength);
-                                               Destination.Buffer        = DestinationBuffer;
-
-                                               Status = RtlExpandEnvironmentStrings_U (Environment,
-                                                                                       & Source,
-                                                                                       & Destination,
-                                                                                       & Length);
-                                               if(NT_SUCCESS(Status))
-                                               {
-                                                       *DataLength = min(*DataLength, Destination.Length);
-                                                       RtlCopyMemory (Data, Destination.Buffer, *DataLength);
-                                               }
-                                               RtlFreeHeap (RtlGetProcessHeap(), 0, DestinationBuffer);
-                                       }
-                               }else{
-                                       DPRINT("SM: %s: value won't be expanded\n", __FUNCTION__);
-                                       *DataLength = min(*DataLength, kvpi->DataLength);
-                                       RtlCopyMemory (Data, & kvpi->Data, *DataLength);
-                               }
-                               *DataType = kvpi->Type;
-                       }else{
-                               DPRINT1("SM: %s: Data or DataLength or DataType is NULL!\n", __FUNCTION__);
-                               Status = STATUS_INVALID_PARAMETER;
-                       }
-               }else{
-                       DPRINT1("%s: NtQueryValueKey failed (Status=0x%08lx)\n", __FUNCTION__, Status);
-               }
-               RtlFreeHeap (RtlGetProcessHeap(), 0, KeyValueInformation);
-               NtClose (hKey);
-       }else{
-               DPRINT1("%s: NtOpenKey failed (Status=0x%08lx)\n", __FUNCTION__, Status);
-       }
-       return Status;
-}
-
-/* EOF */