| 
 | 
 
以下代码由ChatGPT生成,我稍加修改了一下。只要把代码复制下来命名为***.c即可使用WDK7编译。 
- #include <ntddk.h>
 
  
- void LoadImageNotifyRoutine
 
 - (
 
 -         PUNICODE_STRING FullImageName,
 
 -         HANDLE ProcessId,
 
 -         PIMAGE_INFO ImageInfo
 
 - )
 
 - {
 
 -         if (!FullImageName || !ImageInfo->SystemModeImage)
 
 -         {
 
 -                 return;
 
 -         }
 
 -         if (wcsstr(FullImageName->Buffer, L".sys"))
 
 -         {
 
 -                 UNICODE_STRING source, destination;
 
 -                 OBJECT_ATTRIBUTES attr;
 
 -                 IO_STATUS_BLOCK ioStatus;
 
 -                 HANDLE sourceHandle, destHandle;        
 
 -                 //注意:不建议使用如此大的局部变量,应该动态申请空间。AI可能偷懒了。
 
 -                 WCHAR destinationPath[260] = L"\\??\\C:\";
 
 -                 wcscat(destinationPath, wcsrchr(FullImageName->Buffer, L'\\') + 1);
 
 -                 RtlInitUnicodeString(&source, FullImageName->Buffer);
 
 -                 RtlInitUnicodeString(&destination, destinationPath);
 
 -                 InitializeObjectAttributes(&attr, &source, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
 
 -                 if (NT_SUCCESS(ZwCreateFile(&sourceHandle, GENERIC_READ, &attr, &ioStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0)))
 
 -                 {
 
 -                         InitializeObjectAttributes(&attr, &destination, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
 
 -                         if (NT_SUCCESS(ZwCreateFile(&destHandle, GENERIC_WRITE, &attr, &ioStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0)))
 
 -                         {
 
 -                                 //注意:不建议使用如此大的局部变量,应该动态申请空间。AI可能偷懒了。
 
 -                                 UCHAR buffer[4096];
 
 -                                 ULONG bytesRead, bytesWritten;
 
 -                                 while (NT_SUCCESS(ZwReadFile(sourceHandle, NULL, NULL, NULL, &ioStatus, buffer, sizeof(buffer), NULL, NULL)) && ioStatus.Information > 0)
 
 -                                 {
 
 -                                         bytesRead = (ULONG)ioStatus.Information;
 
 -                                         ZwWriteFile(destHandle, NULL, NULL, NULL, &ioStatus, buffer, bytesRead, NULL, NULL);
 
 -                                 }
 
 -                                 ZwClose(destHandle);
 
 -                         }
 
 -                         ZwClose(sourceHandle);
 
 -                 }
 
 -         }
 
 - }
 
  
- void DriverUnload(PDRIVER_OBJECT DriverObject)
 
 - {
 
 -         PsRemoveLoadImageNotifyRoutine(LoadImageNotifyRoutine);
 
 - }
 
  
- NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
 
 - {
 
 -         UNREFERENCED_PARAMETER(RegistryPath);
 
 -         DriverObject->DriverUnload = DriverUnload;
 
 -         return PsSetLoadImageNotifyRoutine(LoadImageNotifyRoutine);
 
 - }
 
  复制代码 
为啥我要发这个帖子呢?原因在这: |   
 
 
 
 |