ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId ( IN HANDLE  RegKey,
OUT PUNICODE_STRING  ImageName,
OUT PULONG_PTR  ResourceId,
OUT PULONG  ValueType 
)

Definition at line 104 of file image.c.

Referenced by KsMapModuleName().

{
    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 = AllocateItem(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 */
        FreeItem(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)AllocateItem(PagedPool, ImageLength);

    /* check for success */
    if (!*ResourceId)
    {
        /* insufficient memory */
        FreeItem(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 */
        FreeItem(ImageName->Buffer);
        FreeItem((PVOID)*ResourceId);
    }

    /* return result */
    return Status;
}

Generated on Sun May 27 2012 04:58:12 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.