vdkdelete.c
来自「Virtual Disk Driver」· C语言 代码 · 共 162 行
C
162 行
/* vdkdelete.c Virtual Disk kernel-mode driver for Windows NT platform Delete disk/partition device objects Copyright (C) 2003 Ken Kato*/#include "vdkbase.h"#include "vdkutil.h"#include "vdkaccess.h"#include "imports.h"#include "vdkdrv.h"#ifdef ALLOC_PRAGMA#pragma alloc_text(PAGE, VdkDeleteDevice)#endif // ALLOC_PRAGMA//// delete a device object//VOIDVdkDeleteDevice( IN PDEVICE_OBJECT DeviceObject){ PPART_EXTENSION part_extension; VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] VdkDeleteDevice\n")); part_extension = (PPART_EXTENSION)DeviceObject->DeviceExtension; // // Release resourse common to disks and partitions // VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] Deleting %ws\n", part_extension->DeviceName.Buffer)); if (part_extension->DeviceName.Buffer) { ExFreePool(part_extension->DeviceName.Buffer); RtlZeroMemory (&part_extension->DeviceName, sizeof(part_extension->DeviceName)); } if (part_extension->SymbolicLink.Buffer) { VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] Deleting Symbolic link %ws\n", part_extension->SymbolicLink.Buffer)); IoDeleteSymbolicLink(&part_extension->SymbolicLink); ExFreePool(part_extension->SymbolicLink.Buffer); RtlZeroMemory (&part_extension->SymbolicLink, sizeof(part_extension->SymbolicLink)); } if (part_extension == (PPART_EXTENSION)part_extension->FirstPartition) { // This is a disk device object PDISK_EXTENSION disk_extension = (PDISK_EXTENSION)part_extension; // Delete and release all resources that might be created // // - Disk device thread // - Image file information // - Symbolic link // - Directory object // // // Close the image files // if (disk_extension->DiskInfo.DiskType) { VdkCloseDisk(&disk_extension->DiskInfo); } // // Terminate disk device thread // VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] Terminating device thread\n")); disk_extension->TerminateThread = TRUE; KeSetEvent( &disk_extension->RequestEvent, (KPRIORITY) 0, FALSE); KeWaitForSingleObject( disk_extension->ThreadPointer, Executive, KernelMode, FALSE, NULL); ObDereferenceObject(disk_extension->ThreadPointer);#ifdef VDK_SUPPORT_NETWORK // // Delete security context object // if (disk_extension->SecurityContext) { VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] Freeing security context\n")); SeDeleteClientSecurity(disk_extension->SecurityContext); ExFreePool(disk_extension->SecurityContext); RtlZeroMemory (&disk_extension->SecurityContext, sizeof(disk_extension->SecurityContext)); }#endif // VDK_SUPPORT_NETWORK // // Delete default symbolic links // if (disk_extension->AnotherLink.Buffer) { VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] Deleting Symbolic link %ws\n", disk_extension->AnotherLink.Buffer)); IoDeleteSymbolicLink(&disk_extension->AnotherLink); ExFreePool(disk_extension->AnotherLink.Buffer); RtlZeroMemory (&disk_extension->AnotherLink, sizeof(disk_extension->AnotherLink)); } // // Delete the directory object // if (disk_extension->DirectoryHandle) { VDKTRACE(VDKDELETE | VDKINFO, ("[VDK] Closing directory handle\n")); ZwClose(disk_extension->DirectoryHandle); } IoGetConfigurationInformation()->DiskCount--; } // // Delete the device object // IoDeleteDevice(DeviceObject); return;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?