ویرگول
ورودثبت نام
سید عمید قائم مقامی
سید عمید قائم مقامیبرنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
سید عمید قائم مقامی
سید عمید قائم مقامی
خواندن ۱ دقیقه·۵ ماه پیش

درایور نویسی سطح کرنل قسمت سوم(ساخت یک فولدر همراه با کد درایور):

این یک درایور کرنل کاملاً ساده و درست است که هنگام Load شدن، یک فولدر در درایو C: می‌سازد.

#pragma warning(disable : 4100) #include <ntddk.h> NTSTATUS CreateDirectory() { UNICODE_STRING dirPath; OBJECT_ATTRIBUTES objAttr; HANDLE hDir = NULL; IO_STATUS_BLOCK ioStatus; NTSTATUS status; // مسیر فولدر (NT Path) RtlInitUnicodeString(&dirPath, L"\\??\\C:\\KernelTest"); InitializeObjectAttributes( &objAttr, &dirPath, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL ); status = ZwCreateFile( &hDir, FILE_LIST_DIRECTORY | SYNCHRONIZE, &objAttr, &ioStatus, NULL, FILE_ATTRIBUTE_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_CREATE, // اگر نبود بساز FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 ); if (NT_SUCCESS(status)) { ZwClose(hDir); DbgPrintEx(0, 0, "Directory created successfully!\n"); } else { DbgPrintEx(0, 0, "Failed to create directory: 0x%X\n", status); } return status; } NTSTATUS UnloadDriver(PDRIVER_OBJECT DriverObject) { DbgPrintEx(0, 0, "Driver unloaded\n"); return STATUS_SUCCESS; } NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { UNREFERENCED_PARAMETER(RegistryPath); DriverObject->DriverUnload = UnloadDriver; DbgPrintEx(0, 0, "Driver loaded\n"); CreateDirectory(); return STATUS_SUCCESS; }

نکته مهم (خیلی مهم)

در کرنل:

نباید از مسیرهای Win32 مثل C:\... مستقیم استفاده کنی

باید از مسیر NT استفاده شود:

\??\C:\KernelTest

این کد دقیقاً چه می‌کند؟

مسیر فولدر:

L"\\??\\C:\\KernelTest"
  • \\??\\ → فضای نام NT

  • C: → درایو

  • KernelTest → فولدر


ZwCreateFile

در کرنل:

  • هم برای فایل

  • هم برای دایرکتوری

استفاده می‌شود.

فلگ مهم:

FILE_DIRECTORY_FILE

یعنی این object یک فولدر است.

همان گونه که در قسمت های قبل درایور رو ساخت و اجرا و ... میکردم درایور رو اجرا میکنیم.

قبل از اجرای درایور:

بعد از اجرای درایور:

Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com

درایورویندوز
۲
۰
سید عمید قائم مقامی
سید عمید قائم مقامی
برنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
شاید از این پست‌ها خوشتان بیاید