Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Lyrik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
#include <ntddk.h>
 
#pragma pack(1)
 
typedef struct _DEVICE_EXTENSION_
{
    PDEVICE_OBJECT pdo;
    UNICODE_STRING ustrSymLinkName;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
 
NTSTATUS
OnUnLoad( IN PDRIVER_OBJECT pDriverObject )
{
    PDEVICE_OBJECT pNextDevObj;
    int i;
    DbgPrint( "OnUnLoad" );
    pNextDevObj = pDriverObject->DeviceObject;
    
    for ( i = 0; pNextDevObj!=NULL; i++ )
    {
        PDEVICE_EXTENSION dx = (PDEVICE_EXTENSION)pNextDevObj->DeviceExtension;
        
        UNICODE_STRING *pLinkName = & (dx->ustrSymLinkName);
        
        pNextDevObj = pNextDevObj->NextDevice;
        DbgPrint( " OnUnLoad Deleting device (%d) : pointer to PDO = %X. ",
            i, dx->pdo
            );
        DbgPrint( "OnUnLoad Deleting symLink = %ws.", pLinkName->Buffer );
        
        IoDeleteSymbolicLink( pLinkName );
        IoDeleteDevice( dx->pdo );
    }
            return STATUS_SUCCESS;
}
 
NTSTATUS
DriverEntry(
        IN PDRIVER_OBJECT  pDriverObject,
        IN PUNICODE_STRING pRegistryPath
        )
{
    NTSTATUS status = STATUS_SUCCESS;
    PDEVICE_OBJECT pdo;
    UNICODE_STRING devName;
    UNICODE_STRING symLinkName;
    PDEVICE_EXTENSION pdx;
    
    RtlInitUnicodeString( &devName, L"\\Device\\PavelDevice" );
    RtlInitUnicodeString( &symLinkName, L"\\DosDevices\\PavelDevice " );
    pDriverObject->DriverUnload = OnUnLoad;
    
    status = IoCreateDevice(
                pDriverObject,
                sizeof( DEVICE_EXTENSION ),
                &devName,
                FILE_DEVICE_UNKNOWN,
                0,
                FALSE,
                &pdo
                );
    
    if ( !NT_SUCCESS(status) )
    {
        DbgPrint( "DriverEntry IoCreateDevice error" );
        return status;
    }
    
    pdx = (PDEVICE_EXTENSION)pdo->DeviceExtension;
    pdx->pdo = pdo;
    pdx->ustrSymLinkName = symLinkName;
    
    status = IoCreateSymbolicLink( &symLinkName, &devName );
    if ( !NT_SUCCESS(status) )
    {
        IoDeleteDevice( pdo );
        return status;
    }
    
    DbgPrint( "DriverEnrty successfully completed." );
    return status;
}

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 01:10 05-02-2007
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru