[ros-diffs] [janderwald] 42254: - Remove DriverEntry as ks is kernel mode dll - Implement KsGetImageNameAndResourceId, KsMapModuleName

janderwald at svn.reactos.org janderwald at svn.reactos.org
Mon Jul 27 18:17:25 CEST 2009


Author: janderwald
Date: Mon Jul 27 18:17:24 2009
New Revision: 42254

URL: http://svn.reactos.org/svn/reactos?rev=42254&view=rev
Log:
- Remove DriverEntry as ks is kernel mode dll
- Implement KsGetImageNameAndResourceId, KsMapModuleName

Modified:
    trunk/reactos/drivers/ksfilter/ks/driver.c
    trunk/reactos/drivers/ksfilter/ks/image.c
    trunk/reactos/drivers/ksfilter/ks/ks.rbuild

Modified: trunk/reactos/drivers/ksfilter/ks/driver.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/driver.c?rev=42254&r1=42253&r2=42254&view=diff
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/driver.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/driver.c [iso-8859-1] Mon Jul 27 18:17:24 2009
@@ -10,17 +10,6 @@
 
 #include "ksfunc.h"
 
-
-NTSTATUS
-NTAPI
-DriverEntry(
-    IN PDRIVER_OBJECT Driver,
-    IN PUNICODE_STRING Registry_path
-)
-{
-    DPRINT1("ks.sys loaded\n");
-    return STATUS_SUCCESS;
-}
 
 /*
     @implemented

Modified: trunk/reactos/drivers/ksfilter/ks/image.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/image.c?rev=42254&r1=42253&r2=42254&view=diff
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/image.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/image.c [iso-8859-1] Mon Jul 27 18:17:24 2009
@@ -82,8 +82,21 @@
     return Status;
 }
 
-/*
-    @unimplemented
+
+NTSTATUS
+KspQueryRegValue(
+    IN HANDLE KeyHandle,
+    IN LPWSTR KeyName,
+    IN PVOID Buffer,
+    IN OUT PULONG BufferLength,
+    OUT PULONG Type)
+{
+    UNIMPLEMENTED
+    return STATUS_NOT_IMPLEMENTED;
+}
+
+/*
+    @implemented
 */
 KSDDKAPI
 NTSTATUS
@@ -94,12 +107,78 @@
     OUT PULONG_PTR ResourceId,
     OUT PULONG ValueType)
 {
-    UNIMPLEMENTED;
-    return STATUS_UNSUCCESSFUL;
-}
-
-/*
-    @unimplemented
+    NTSTATUS Status;
+    ULONG ImageLength;
+    WCHAR ImagePath[] = {L"\\SystemRoot\\system32\\drivers\\"};
+
+    /* first clear the provided ImageName */
+    ImageName->Buffer = NULL;
+    ImageName->Length = ImageName->MaximumLength = 0;
+
+    ImageLength = 0;
+    /* retrieve length of image name */
+    Status = KspQueryRegValue(RegKey, L"Image", NULL, &ImageLength, NULL);
+
+    if (Status != STATUS_BUFFER_OVERFLOW)
+    {
+        /* key value doesnt exist */
+        return Status;
+    }
+
+    /* allocate image name buffer */
+    ImageName->MaximumLength = sizeof(ImagePath) + ImageLength;
+    ImageName->Buffer = ExAllocatePool(PagedPool, ImageName->MaximumLength);
+
+    /* check for success */
+    if (!ImageName->Buffer)
+    {
+        /* insufficient memory */
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
+    /* copy image name */
+    RtlCopyMemory(ImageName->Buffer, ImagePath, sizeof(ImagePath));
+
+    /* retrieve image name */
+    Status = KspQueryRegValue(RegKey, L"Image", &ImageName->Buffer[sizeof(ImagePath) / sizeof(WCHAR)], &ImageLength, NULL);
+
+    if (!NT_SUCCESS(Status))
+    {
+        /* unexpected error */
+        ExFreePool(ImageName->Buffer);
+        return Status;
+    }
+
+    /* now query for resource id length*/
+   ImageLength = 0;
+   Status = KspQueryRegValue(RegKey, L"ResourceId", NULL, &ImageLength, ValueType);
+
+    /* allocate resource id buffer*/
+    *ResourceId = (ULONG_PTR)ExAllocatePool(PagedPool, ImageLength);
+
+    /* check for success */
+    if (!*ResourceId)
+    {
+        /* insufficient memory */
+        ExFreePool(ImageName->Buffer);
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+    /* now query for resource id */
+    Status = KspQueryRegValue(RegKey, L"ResourceId", (PVOID)*ResourceId, &ImageLength, ValueType);
+
+    if (!NT_SUCCESS(Status))
+    {
+        /* unexpected error */
+        ExFreePool(ImageName->Buffer);
+        ExFreePool((PVOID)*ResourceId);
+    }
+
+    /* return result */
+    return Status;
+}
+
+/*
+    @implemented
 */
 KSDDKAPI
 NTSTATUS
@@ -111,6 +190,64 @@
     OUT PULONG_PTR ResourceId,
     OUT PULONG ValueType)
 {
-    UNIMPLEMENTED;
-    return STATUS_UNSUCCESSFUL;
-}
+    NTSTATUS Status;
+    UNICODE_STRING SubKeyName;
+    UNICODE_STRING Modules = RTL_CONSTANT_STRING(L"Modules\\");
+    HANDLE hKey, hSubKey;
+    OBJECT_ATTRIBUTES ObjectAttributes;
+
+    /* first open device key */
+    Status = IoOpenDeviceRegistryKey(PhysicalDeviceObject, PLUGPLAY_REGKEY_DEVICE, GENERIC_READ, &hKey);
+
+    /* check for success */
+    if (!NT_SUCCESS(Status))
+    {
+        /* invalid parameter */
+        return STATUS_INVALID_PARAMETER;
+    }
+
+    /* initialize subkey buffer */
+    SubKeyName.Length = 0;
+    SubKeyName.MaximumLength = Modules.MaximumLength + ModuleName->MaximumLength;
+    SubKeyName.Buffer = ExAllocatePool(PagedPool, SubKeyName.MaximumLength);
+
+    /* check for success */
+    if (!SubKeyName.Buffer)
+    {
+        /* not enough memory */
+        ZwClose(hKey);
+        return STATUS_NO_MEMORY;
+    }
+
+    /* build subkey string */
+    RtlAppendUnicodeStringToString(&SubKeyName, &Modules);
+    RtlAppendUnicodeStringToString(&SubKeyName, ModuleName);
+
+    /* initialize subkey attributes */
+    InitializeObjectAttributes(&ObjectAttributes, &SubKeyName, OBJ_CASE_INSENSITIVE, hKey, NULL);
+
+    /* now open the subkey */
+    Status = ZwOpenKey(&hSubKey, GENERIC_READ, &ObjectAttributes);
+
+    /* check for success */
+    if (NT_SUCCESS(Status))
+    {
+        /* defer work */
+        Status = KsGetImageNameAndResourceId(hSubKey, ImageName, ResourceId, ValueType);
+
+        /* close subkey */
+        ZwClose(hSubKey);
+    }
+
+    /* free subkey string */
+    ExFreePool(SubKeyName.Buffer);
+
+    /* close device key */
+    ZwClose(hKey);
+
+    /* return status */
+    return Status;
+}
+
+
+

Modified: trunk/reactos/drivers/ksfilter/ks/ks.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/ks.rbuild?rev=42254&r1=42253&r2=42254&view=diff
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/ks.rbuild [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/ks.rbuild [iso-8859-1] Mon Jul 27 18:17:24 2009
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="ks" type="kernelmodedriver" installbase="system32/drivers" installname="ks.sys">
+<module name="ks" type="kernelmodedriver" installbase="system32/drivers" installname="ks.sys" entrypoint="0">
 	<include base="ks">.</include>
 	<include base="ks">..</include>
 	<include base="ks">../include</include>




More information about the Ros-diffs mailing list