青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小默

對發送Irp刪除文件的學習筆記zz

在網上逛游的時候,看到了http://blog.csdn.net/beijixing2003/archive/2008/06/11/2535069.aspx這篇文章。于是對發送Irp刪除文件進行了一翻學習。然后把代碼重寫了一下。上面鏈接的blog,把很多細節寫的已經很詳細了。所以學習起來還是很輕松的。

把自己重寫的代碼貼一下:

#include <ntddk.h>

#define AYA_DEVICE L"\\Device\\DFBSI"
#define AYA_LINK L"\\DosDevices\\DFBSI"


HANDLE NTAPI AYA_OpenFile( IN PWCHAR szFileName )
{
NTSTATUS    ns 
= STATUS_SUCCESS;
UNICODE_STRING   FileName;
OBJECT_ATTRIBUTES oa;
HANDLE     hFile;
IO_STATUS_BLOCK   IoStatus;

if ( KeGetCurrentIrql() > PASSIVE_LEVEL )
{
   KdPrint(( 
"Irql Error" ));
   
return NULL;
}

RtlInitUnicodeString( 
&FileName ,szFileName );
InitializeObjectAttributes( 
&oa ,&FileName ,OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE ,\
         NULL ,NULL);

ns 
= IoCreateFile( &hFile ,FILE_READ_ATTRIBUTES ,&oa ,&IoStatus ,0 ,FILE_ATTRIBUTE_NORMAL ,\
       FILE_SHARE_DELETE ,FILE_OPEN ,
0 ,NULL ,0 ,CreateFileTypeNone ,\
       NULL ,IO_NO_PARAMETER_CHECKING );

if ( !NT_SUCCESS( ns ) )
{
   ZwClose( hFile );
   KdPrint(( 
"IoCreateFile Error" ));
   
return NULL;
}

return hFile;
}

NTSTATUS
IoSetFileCompletion(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
{
Irp
->UserIosb->Status   = Irp->IoStatus.Status;
Irp
->UserIosb->Information = Irp->IoStatus.Information;

KeSetEvent( Irp
->UserEvent ,IO_NO_INCREMENT ,FALSE );

IoFreeIrp( Irp );
return STATUS_MORE_PROCESSING_REQUIRED;
}


NTSTATUS NTAPI StripFileAttributes( IN HANDLE hFile )
{
NTSTATUS     ns 
= STATUS_SUCCESS;
PFILE_OBJECT    pFileObject;
PDEVICE_OBJECT    pDeviceObject;
PIRP      pIrp;
KEVENT      kFsEvent;
FILE_BASIC_INFORMATION FileInformation;
IO_STATUS_BLOCK    IoStatus;
PIO_STACK_LOCATION   pIrpSt;

ns 
= ObReferenceObjectByHandle( hFile ,DELETE ,*IoFileObjectType ,KernelMode ,\
          (PVOID
*)&pFileObject ,NULL );
if ( !NT_SUCCESS( ns ) )
{
   ObReferenceObject( pFileObject );
   KdPrint(( 
"StripFileAttributes ObReferenceObjectByHandle Error" ));
   
return ns;
}

pDeviceObject 
= IoGetRelatedDeviceObject( pFileObject );

pIrp 
= IoAllocateIrp( pDeviceObject->StackSize ,TRUE );
if ( pIrp == NULL )
{
   ObReferenceObject( pFileObject );
   KdPrint(( 
"StripFileAttributes IoAllocateIrp Error" ));
   
return STATUS_UNSUCCESSFUL;
}

KeInitializeEvent( 
&kFsEvent ,SynchronizationEvent ,FALSE );

RtlZeroMemory( 
&FileInformation ,sizeof( FILE_BASIC_INFORMATION ) );
FileInformation.FileAttributes 
= FILE_ATTRIBUTE_NORMAL;

pIrp
->AssociatedIrp.SystemBuffer   = &FileInformation;
pIrp
->UserEvent        = &kFsEvent;
pIrp
->UserIosb        = &IoStatus;
pIrp
->Tail.Overlay.Thread     = PsGetCurrentThread();
pIrp
->Tail.Overlay.OriginalFileObject = pFileObject;
pIrp
->RequestorMode       = KernelMode;

pIrpSt 
= IoGetNextIrpStackLocation( pIrp );
pIrpSt
->MajorFunction      = IRP_MJ_SET_INFORMATION;
pIrpSt
->DeviceObject      = pDeviceObject;
pIrpSt
->FileObject       = pFileObject;
pIrpSt
->Parameters.SetFile.Length   = sizeof( FILE_BASIC_INFORMATION );
pIrpSt
->Parameters.SetFile.FileObject = pFileObject;
pIrpSt
->Parameters.SetFile.FileInformationClass
            
= FileBasicInformation;

IoSetCompletionRoutine( pIrp ,IoSetFileCompletion ,NULL ,TRUE ,TRUE ,TRUE );

IoCallDriver( pDeviceObject ,pIrp );

KeWaitForSingleObject( 
&kFsEvent ,Executive ,KernelMode ,TRUE ,NULL );

ObReferenceObject( pFileObject );

return STATUS_SUCCESS;
}


NTSTATUS NTAPI DeleteFileBySendIrp( IN HANDLE hFile )
{
NTSTATUS       ns 
= STATUS_SUCCESS;
PFILE_OBJECT      pFileObject;
PDEVICE_OBJECT      pDeviceObject;
PIRP        pIrp;
KEVENT        kFsEvent;
FILE_DISPOSITION_INFORMATION FileInformation;
IO_STATUS_BLOCK      IoStatus;
PIO_STACK_LOCATION     pIrpSt;
PSECTION_OBJECT_POINTERS   pSectionObjectPointer;

ns 
= ObReferenceObjectByHandle( hFile ,DELETE ,*IoFileObjectType ,KernelMode ,\
          (PVOID
*)&pFileObject ,NULL );

if ( !NT_SUCCESS( ns ) )
{
   ObReferenceObject( pFileObject );
   KdPrint(( 
"DeleteFileBySendIrp ObReferenceObjectByHandle Error" ));
   
return ns;
}


pDeviceObject 
= IoGetRelatedDeviceObject( pFileObject );

pIrp 
= IoAllocateIrp( pDeviceObject->StackSize ,TRUE );
if ( pIrp == NULL )
{
   ObReferenceObject( pFileObject );
   KdPrint(( 
"DeleteFileBySendIrp IoAllocateIrp Error" ));
   
return STATUS_UNSUCCESSFUL;
}

KeInitializeEvent( 
&kFsEvent ,SynchronizationEvent ,FALSE );

FileInformation.DeleteFile 
= TRUE;

pIrp
->AssociatedIrp.SystemBuffer    = &FileInformation;
pIrp
->UserEvent         = &kFsEvent;
pIrp
->UserIosb         = &IoStatus;
pIrp
->Tail.Overlay.Thread      = PsGetCurrentThread();
pIrp
->Tail.Overlay.OriginalFileObject   = pFileObject;
pIrp
->RequestorMode        = KernelMode;

pIrpSt 
= IoGetNextIrpStackLocation( pIrp );
pIrpSt
->MajorFunction       = IRP_MJ_SET_INFORMATION;
pIrpSt
->DeviceObject       = pDeviceObject;
pIrpSt
->FileObject        = pFileObject;
pIrpSt
->Parameters.SetFile.Length    = sizeof( FILE_DISPOSITION_INFORMATION );
pIrpSt
->Parameters.SetFile.FileObject   = pFileObject;
pIrpSt
->Parameters.SetFile.FileInformationClass
             
= FileDispositionInformation;
IoSetCompletionRoutine( pIrp ,IoSetFileCompletion ,NULL ,TRUE ,TRUE ,TRUE );

pSectionObjectPointer 
= pFileObject->SectionObjectPointer;
pSectionObjectPointer
->DataSectionObject = 0;
pSectionObjectPointer
->ImageSectionObject = 0;

IoCallDriver( pDeviceObject ,pIrp );

KeWaitForSingleObject( 
&kFsEvent ,Executive ,KernelMode ,TRUE ,NULL );

ObReferenceObject( pFileObject );

KdPrint(( 
"OK" ));
return STATUS_SUCCESS;
}

NTSTATUS NTAPI ForceDeleteFiles( PWCHAR szFileName )
{
HANDLE    hFile;
NTSTATUS   ns 
= STATUS_SUCCESS;

hFile 
= AYA_OpenFile( szFileName );

ns 
= StripFileAttributes( hFile );
if ( !NT_SUCCESS( ns ) )
{
   ZwClose( hFile );
   KdPrint(( 
"ForceDeleteFiles StripFileAttributes Error" ));
   
return ns;
}
ns 
= DeleteFileBySendIrp( hFile );
if ( !NT_SUCCESS( ns ) )
{
   ZwClose( hFile );
   KdPrint(( 
"ForceDeleteFiles DeleteFileBySendIrp Error" ));
   
return ns;
}
ZwClose( hFile );

return ns;
}

void AYA_Unload( IN PDRIVER_OBJECT pDriverObj )
{
UNICODE_STRING Temp;

RtlInitUnicodeString( 
&Temp ,AYA_LINK );
IoDeleteSymbolicLink( 
&Temp );
IoDeleteDevice( pDriverObj
->DeviceObject );
}

NTSTATUS AYA_Dispatch( IN PDEVICE_OBJECT pDeviceObj ,IN PIRP pIrp )
{
NTSTATUS ns 
= STATUS_SUCCESS;
PIO_STACK_LOCATION stIrp;

stIrp 
= IoGetCurrentIrpStackLocation( pIrp );

switch( stIrp->MajorFunction )
{
case IRP_MJ_CREATE:
   
break;
case IRP_MJ_CLOSE:
   
break;
case IRP_MJ_DEVICE_CONTROL:
   
break;
default:
   pIrp
->IoStatus.Status = STATUS_INVALID_PARAMETER;
   
break;
}

ns 
= pIrp->IoStatus.Status;
IoCompleteRequest( pIrp ,IO_NO_INCREMENT );
return ns;
}

NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObj ,IN PUNICODE_STRING RegistryPath )
{
NTSTATUS   ns 
= STATUS_SUCCESS;
UNICODE_STRING AYA;
UNICODE_STRING AYAL;
PDEVICE_OBJECT pDevice;
WCHAR    szFileName[] 
= L"\\??\\C:\\2.txt";

RtlInitUnicodeString( 
&AYA ,AYA_DEVICE );
ns 
= IoCreateDevice( pDriverObj ,0 ,&AYA ,FILE_DEVICE_UNKNOWN ,0 ,FALSE ,&pDevice );

RtlInitUnicodeString( 
&AYAL ,AYA_LINK );
ns 
= IoCreateSymbolicLink( &AYAL ,&AYA );

pDriverObj
->MajorFunction[IRP_MJ_CREATE]    = 
pDriverObj
->MajorFunction[IRP_MJ_CLOSE]     =
pDriverObj
->MajorFunction[IRP_MJ_DEVICE_CONTROL] = AYA_Dispatch;

pDriverObj
->DriverUnload = AYA_Unload;

ForceDeleteFiles( szFileName );

return ns;

}

posted on 2010-02-06 00:17 小默 閱讀(1062) 評論(0)  編輯 收藏 引用 所屬分類: Windows

導航

統計

留言簿(13)

隨筆分類(287)

隨筆檔案(289)

漏洞

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产女主播在线一区二区| 亚洲毛片av在线| 亚洲美女视频在线免费观看| 亚洲国产成人tv| 亚洲人成在线免费观看| 亚洲欧洲精品一区二区| 日韩亚洲国产精品| 在线综合亚洲欧美在线视频| 亚洲专区在线视频| 久久久噜噜噜久久狠狠50岁| 久久久国产成人精品| 国产亚洲成av人在线观看导航| 国产一区二区你懂的| 91久久国产精品91久久性色| 亚洲伦理一区| 欧美一区二区三区播放老司机| 久久国产精品久久w女人spa| 欧美成人精品| 国产精品99久久久久久有的能看| 性欧美xxxx视频在线观看| 欧美成人日本| 国产欧美日韩不卡| 亚洲精品美女久久7777777| 性色av一区二区怡红| 美女精品一区| 亚洲影院污污.| 欧美激情第1页| 国产亚洲精品aa午夜观看| 亚洲精品在线二区| 久久精品免费电影| 99国产一区二区三精品乱码| 久久久久久电影| 国产欧美日韩亚洲精品| 一本色道婷婷久久欧美| 麻豆精品在线视频| 亚洲天堂男人| 欧美精品在线播放| 激情欧美一区二区三区在线观看| 亚洲视频在线观看三级| 欧美成人资源网| 午夜伦理片一区| 国产精品高潮呻吟| 宅男精品视频| 亚洲人成人99网站| 久久精品99无色码中文字幕 | 欧美成人午夜激情视频| 亚洲一级在线| 国产精品播放| 一区二区欧美激情| 亚洲黄色免费电影| 麻豆av一区二区三区| 国产一区二区三区成人欧美日韩在线观看 | 国产视频在线观看一区二区| 亚洲视频综合| 亚洲精品中文字幕在线观看| 免费91麻豆精品国产自产在线观看| 国产日产亚洲精品系列| 亚洲男女毛片无遮挡| 日韩午夜视频在线观看| 欧美日韩国产小视频| 99精品国产在热久久下载| 欧美一级理论片| 亚洲一区二区三区乱码aⅴ蜜桃女| 免费中文日韩| 另类激情亚洲| 亚洲国产精品一区二区第一页| 久久精品天堂| 久久久久se| 亚洲国内欧美| 日韩一级精品| 国产精品三级久久久久久电影| 欧美一区二区日韩一区二区| 久久成人免费网| 亚洲日本va午夜在线电影| 亚洲经典视频在线观看| 欧美视频免费在线| 久久激五月天综合精品| 久久一区二区视频| 在线亚洲一区| 久久精品亚洲一区二区| 亚洲精品影院| 亚洲一区二区三区四区视频| 国产精品视频第一区| 久久亚洲精品一区二区| 欧美高清视频| 午夜伦理片一区| 久久久欧美一区二区| 一本久道综合久久精品| 亚洲性图久久| 亚洲国产视频直播| 亚洲性夜色噜噜噜7777| 一区二区在线视频播放| 91久久精品日日躁夜夜躁欧美 | 欧美日韩一区二区高清| 香港久久久电影| 蜜桃久久av一区| 亚洲欧美高清| 老司机免费视频久久| 一区二区欧美在线观看| 午夜视频久久久| 日韩一级不卡| 欧美在线亚洲综合一区| 日韩视频中文| 久久久免费av| 欧美在线观看www| 欧美区一区二区三区| 久久久久一区二区三区四区| 欧美另类人妖| 欧美阿v一级看视频| 国产精品欧美日韩一区| 91久久国产精品91久久性色| 国产在线一区二区三区四区| 一本大道久久a久久精二百| 尤妮丝一区二区裸体视频| 中文久久精品| 亚洲伦伦在线| 美女精品一区| 蜜臀av性久久久久蜜臀aⅴ| 国产精品久久一卡二卡| 亚洲国内欧美| 亚洲国产一区二区视频| 久久精品国产欧美亚洲人人爽| 亚洲一区网站| 中文亚洲视频在线| 午夜综合激情| 欧美丰满高潮xxxx喷水动漫| 久久久国产精品一区| 欧美性久久久| 99视频精品全部免费在线| 亚洲精品一区中文| 麻豆亚洲精品| 亚洲成人自拍视频| 亚洲高清一区二区三区| 久久视频精品在线| 免费成人av资源网| 亚洲第一区色| 久久深夜福利免费观看| 裸体一区二区| 亚洲国产精品va| 噜噜噜91成人网| 欧美激情一区二区三区不卡| 亚洲国产小视频在线观看| 欧美/亚洲一区| 欧美高清在线视频| 亚洲黄色天堂| 欧美日韩八区| 亚洲视频999| 性欧美1819性猛交| 国产视频在线观看一区| 久久精品国产免费| 欧美电影免费观看高清完整版| 亚洲第一综合天堂另类专| 久久综合九色九九| 亚洲国产精品t66y| 中文亚洲视频在线| 国产农村妇女精品一区二区| 久久精品国产69国产精品亚洲| 免费在线欧美视频| 亚洲美女诱惑| 国产精品―色哟哟| 久久久久久9999| 亚洲人www| 欧美在线网址| 亚洲精品日韩一| 国产精品乱人伦中文| 久久九九热免费视频| 亚洲三级影院| 久久婷婷麻豆| 亚洲图片欧美午夜| 黄色成人av网| 国产精品theporn| 久久久综合免费视频| 日韩亚洲综合在线| 老司机精品视频网站| 亚洲少妇中出一区| 狠狠干综合网| 欧美午夜精品理论片a级大开眼界| 欧美在现视频| 一区二区三欧美| 免费成人高清| 欧美在线亚洲在线| 99国产精品视频免费观看| 国产亚洲精品aa午夜观看| 欧美区视频在线观看| 久久国产精品久久久久久久久久| 亚洲精品在线观看视频| 免费欧美在线视频| 欧美一区在线看| 在线一区二区视频| 亚洲二区在线观看| 国产欧美精品国产国产专区| 欧美日韩八区| 欧美激情一二三区| 久久亚洲综合| 久久国产精品99精品国产| 亚洲伦理在线| 91久久中文| 宅男精品视频| 亚洲高清在线观看| 黄色成人在线|