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

小默

對發送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>
            欧美一区成人| 国产日产欧产精品推荐色| 亚洲欧洲一区二区三区在线观看| 99国产精品私拍| 亚洲精品小视频| 一本色道久久综合狠狠躁篇怎么玩 | 久久这里有精品15一区二区三区| 久久久福利视频| 欧美日韩在线免费观看| 美女网站在线免费欧美精品| 玖玖玖免费嫩草在线影院一区| 老色批av在线精品| 亚洲福利专区| 制服诱惑一区二区| 欧美伊人久久久久久午夜久久久久 | 这里只有精品电影| 亚洲一区二区高清视频| 久久国产精品第一页| 美日韩免费视频| 国产精品久久久久久久久免费樱桃| 国产精品女人网站| 亚洲第一级黄色片| 亚洲天堂成人在线观看| 久久国产欧美精品| 欧美国产亚洲精品久久久8v| 亚洲深夜福利网站| 久久网站热最新地址| 欧美日韩一区在线播放| 国产一区二区三区在线观看免费视频 | 午夜在线视频观看日韩17c| 另类亚洲自拍| 国产精品爽黄69| 亚洲理论在线观看| 麻豆av一区二区三区久久| av不卡在线观看| 欧美大片免费观看| 国产日韩欧美| 亚洲调教视频在线观看| 欧美国产三级| 久久久久久亚洲精品中文字幕| 欧美岛国激情| 原创国产精品91| 久久成人18免费网站| 亚洲精品一区在线观看| 美国三级日本三级久久99| 国产精品区一区| 亚洲一区视频在线| 亚洲日韩欧美视频一区| 久久综合九色| 狠狠久久五月精品中文字幕| 亚洲欧美区自拍先锋| 亚洲人午夜精品| 欧美成人69| 亚洲成人在线免费| 免费毛片一区二区三区久久久| 性欧美1819性猛交| 国产欧美一级| 久久精品91久久久久久再现| 亚洲欧美日韩国产| 亚洲免费播放| 亚洲欧美不卡| 国产精品美女久久久浪潮软件| 一区二区三区四区五区视频 | 久久精品国产精品| 亚洲在线视频一区| 国产欧美一区二区精品秋霞影院| 亚洲一区二区高清| 亚洲一区二区三区四区视频| 国产精品国产三级国产| 亚洲欧美国产高清va在线播| 亚洲四色影视在线观看| 国产精品一区二区久久久 | 91久久精品日日躁夜夜躁欧美| 免费一级欧美片在线观看| 亚洲国产精品成人久久综合一区| 欧美第十八页| 欧美国产精品v| 日韩亚洲欧美高清| 日韩视频不卡中文| 国产精品狠色婷| 久久经典综合| 欧美黑人多人双交| 亚洲欧美另类国产| 久久久999国产| 亚洲精品护士| 亚洲一区欧美二区| 亚洲电影免费观看高清完整版| 亚洲黄色成人久久久| 欧美午夜剧场| 美女精品一区| 欧美性猛交99久久久久99按摩 | 99精品国产在热久久下载| 国产欧美日韩综合一区在线观看| 老色批av在线精品| 欧美视频二区| 免费在线国产精品| 国产精品www网站| 免费看亚洲片| 欧美视频不卡| 欧美福利视频网站| 国产精品一区二区在线观看不卡| 鲁鲁狠狠狠7777一区二区| 欧美日韩国产精品自在自线| 久久久久国产精品人| 欧美日韩国产精品| 欧美成人69av| 国产深夜精品福利| 一本一本a久久| 亚洲成色精品| 欧美一级视频免费在线观看| 一区二区三区你懂的| 久久久噜噜噜久久中文字免| 午夜精品偷拍| 欧美日产一区二区三区在线观看| 久久九九全国免费精品观看| 欧美日韩国产在线播放网站| 久久综合伊人77777麻豆| 国产精品免费视频观看| 欧美三级视频| 欧美大片在线观看一区| 国产精品黄色| 亚洲精品三级| 国产精品一区久久久| 亚洲精品乱码久久久久久黑人| 黄色一区二区三区| 欧美一区二区三区另类| 亚洲午夜在线观看| 欧美日韩精品一区二区天天拍小说| 久久综合九色综合久99| 国产午夜精品全部视频播放 | 一区二区三区日韩欧美| 亚洲欧洲日本在线| 久久婷婷国产麻豆91天堂| 欧美在线一二三| 国产精品尤物| 亚洲性线免费观看视频成熟| 亚洲午夜未删减在线观看| 欧美精品亚洲精品| 亚洲电影免费在线| 亚洲欧洲偷拍精品| 免费在线成人av| 美女黄网久久| 亚洲六月丁香色婷婷综合久久| 葵司免费一区二区三区四区五区| 免费日韩av| 在线精品一区二区| 久久亚洲一区二区三区四区| 美日韩丰满少妇在线观看| 黄色亚洲免费| 猛男gaygay欧美视频| 欧美成年人网站| 一区二区三区久久网| 国产精品成人免费视频| 亚洲综合色在线| 欧美一区二区私人影院日本| 国产一区二区三区四区hd| 久久久久国产精品一区| 欧美高清成人| 日韩一级裸体免费视频| 欧美午夜片欧美片在线观看| 亚洲永久免费| 欧美福利电影在线观看| 亚洲视频在线一区| 国产热re99久久6国产精品| 久久精品视频免费播放| 欧美国产日本韩| 亚洲欧美成人一区二区在线电影| 国产亚洲精品久久飘花| 嫩草国产精品入口| 一区二区三区av| 老牛嫩草一区二区三区日本| 亚洲最新合集| 精品动漫3d一区二区三区| 欧美成熟视频| 欧美亚洲日本网站| 亚洲日本在线观看| 久久国产精品久久久久久电车| 亚洲成色精品| 国产女人18毛片水18精品| 免费日韩成人| 亚洲欧美另类在线| 亚洲激情综合| 久久成人这里只有精品| 日韩视频一区二区在线观看| 国产亚洲欧美中文| 欧美日韩在线一二三| 免费不卡亚洲欧美| 性8sex亚洲区入口| 亚洲先锋成人| 小黄鸭精品密入口导航| 亚洲黄色有码视频| 久久夜色精品国产欧美乱| 亚洲午夜一二三区视频| 曰韩精品一区二区| 国产嫩草一区二区三区在线观看| 免费不卡亚洲欧美| 久久青青草综合| 小黄鸭精品密入口导航| 亚洲性夜色噜噜噜7777| 在线亚洲高清视频|