Удаление notify, установленного PsSetLoadImageNotifyRoutine

Тема в разделе "WASM.NT.KERNEL", создана пользователем Stub, 8 дек 2006.

  1. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Под XP и w2k3 проблем нет, т.к. есть PsRemoveLoadImageNotifyRoutine, а как быть в w2k?
    Ничего в голову не пришло, кроме мысли руками удалить свой notify из массивчика, адресс которого получаю дизасмом этой самой PsSetLoadImageNotifyRoutine. Может есть другие варианты покрасивее? :)
     
  2. Guest

    Guest Guest

    Публикаций:
    0
    Написать свою или взять из ReactOS:
    Код (Text):
    1. NTSTATUS STDCALL
    2. PsRemoveLoadImageNotifyRoutine(IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine)
    3. {
    4.     ULONG i;
    5.  
    6.     /* Loop the routines */
    7.     for(i=0;i<MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT;i++)
    8.     {
    9.         /* Check for a match */
    10.         if ((PVOID)PspLoadImageNotifyRoutine[i] == (PVOID)NotifyRoutine)
    11.         {
    12.             /* Remove and return */
    13.             PspLoadImageNotifyRoutine[i] = NULL;
    14.             return(STATUS_SUCCESS);
    15.         }
    16.     }
    17.  
    18.     /* Nothing found */
    19.     return STATUS_INVALID_PARAMETER;
    20. }
    P.S. Реально код может быть инным (а значит и PsSetLoadImageNotifyRoutine будет добавлять иначе, чтобы избежать конфликтов лучше сделать свою PsSetLoadImageNotifyRoutine:

    Код (Text):
    1. NTSTATUS STDCALL PsSetLoadImageNotifyRoutine(IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine)
    2. {
    3.     ULONG i;
    4.  
    5.     /* Loop the routines */
    6.     for (i = 0; i < MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT; i++)
    7.     {
    8.         /* Find an empty one */
    9.         if (PspLoadImageNotifyRoutine[i] == NULL)
    10.         {
    11.             /* Add it */
    12.             PspLoadImageNotifyRoutine[i] = NotifyRoutine;
    13.             return STATUS_SUCCESS;
    14.         }
    15.     }
    16.  
    17.     /* Nothing found */
    18.     return STATUS_INVALID_PARAMETER;
    19. }