[Modo Kernel] UnAttachDriver

Iniciado por Arkangel, Junio 17, 2013, 08:45:37 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 17, 2013, 08:45:37 AM Ultima modificación: Junio 18, 2013, 12:22:34 AM por Expermicid
Con esto se quita de la pila de objetos a un driver. Solo quedaría cerrar cualquier hilo  y handel relacionado con el para poder descargarlo con casi total seguridad. 8) 8) 8)
Código: asm

    UnAttachDriver proc pDriverObject:PDRIVER_OBJECT
    LOCAL CurrentIrql
     
    push esi
    push ecx
    push edx
    push ebx
     
    cli
    call KeRaiseIrqlToDpcLevel;Canbio la prioridad para que nada me detenga a medio y se produzca una BSOD
    mov CurrentIrql,eax
     
    xor eax,eax
    mov ebx,pDriverObject
    mov ebx,[ebx+4]
     
     
     
    NextDevice:
    cmp ebx,eax;Compruebo que tengo una direccion valida de un DeviceObject
    je EndDevice
    ;Posicion actual
    ;Uno de los DeviceObject a desconectar
    mov edx,[ebx+10h]
    mov [ebx+10h],eax
    mov ecx,[ebx+0B0h]
    cmp ecx,eax
    je Next
    ;Posicion actual
    ;DEVOBJ_EXTENSION del DeviceObject a desconectar
    mov esi,[ecx+18h];Consigo la direccion del DeviceObject Inferior de la pila de dispositivos
    mov [ecx+18h],eax;EAX = NULL
    cmp eax,esi
    je Next
    ;Posicion actual
    ;DeviceObject inferior
    mov [esi+10h],edx;Coloco la direccion del DeviceObject Superior de la pila de dispositivos
    cmp eax,edx
    je Next
    ;Posicion actual
    ;DeviceObject superior
    mov ecx,[edx+0B0h];Consigo la direccion de DEVOBJ_EXTENSION del DeviceObject Superior
    mov [ecx+18h],esi;Coloco la direccion del DeviceObject Inferior de la pila de dispositivos
     
    DecStackSize:
    dec byte ptr[edx+30];Disminullo el contador de la StackSize
    mov edx,[edx+10h]
    cmp edx,eax
    jne DecStackSize
     
    Next:
    mov ebx,[ebx+0Ch];Paso al siguiente de la lista
    jmp NextDevice
    EndDevice:
    push CurrentIrql
    call KeLowerIrql ;Vuelvo al nivel normal de prioridad
    sti
    xor eax,eax
     
    pop ebx
    pop edx
    pop ecx
    pop esi
     
     
    ret
     
    UnAttachDriver endp