سؤال

وأنا أعمل على برنامج تشغيل عامل تصفية ويندوز لوحة المفاتيح ولست بحاجة لكتابة إلى ملف. حاولت استخدام zwcreate، zwwrite، وzwclose لكن السائق لم يكن قيد التشغيل في PASSIVE_LEVEL وحصلت على الموت الزرقاء. لم يسبق لي أن كتبت سائق ويندوز من قبل. شكرا للمساعدة!

وتحرير: شكرا لك J. اجتياز

هل كانت مفيدة؟

المحلول

جدول workitems (IoAllocateWorkItem / IoQueueWorkItem) والتعامل مع كل ملف I / O من داخل إجراءات workitem رد.

<اقتباس فقرة>   

ولست متأكدا إذا كان فكرة جيدة للسماح للكتابة سائق النواة إلى ملف في المقام الأول. أفضل طريقة للقيام بذلك IMHO هو توفير برنامج الفضاء المستخدم الذي يتصل مع السائق، يحصل على البيانات ومن ثم يكتب إلى القرص.

وهذا صحيح ليونكس، ولكن ليس ويندوز.

نصائح أخرى

وهناك مثال رائع لاستخدام ZW-أدوات لكتابة الملفات من تشغيل الجهاز هو جدت Klog Clandestiny في الموقع rootkit.com . أنها تساعد حاليا لي الكثير.

وكذلك، أنا أوافق نوعا ما مع يوهانس أنه ليس من المستحسن أن تفعل الكلاسيكية يوزرلاند العمل (ملف / صافي /...- الوصول) مباشرة من السائق. ليس فقط لأنه errorprone، بل هو أيضا قد كسر unforseeable في المستقبل. واجهات المستخدم وأكثر استقرارا بكثير ومرنة بشكل طبيعي.

PCUCHAR buffer[] = {0x00, 0x01, 0x02, 0x03};    //  for example
ULONG bufferSize = sizeof(buffer);

UNICODE_STRING      filePath;   //  Must be with DOS prefix: \??\C:\MyFolder\logs.txt
HANDLE              hFile;
OBJECT_ATTRIBUTES   ObjectAttributes;
IO_STATUS_BLOCK     IoStatusBlock;

InitializeObjectAttributes(&ObjectAttributes, &filePath, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);

NTSTATUS Status = ZwCreateFile(&hFile, FILE_GENERIC_READ | FILE_GENERIC_WRITE, &ObjectAttributes,
    &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_CREATE,
    FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);

if (!NT_SUCCESS(Status))
{
    DbgPrint("[DRV_NAME]: Creating file error");
    return Status;
}

Status = ZwWriteFile(hFile, NULL, NULL, NULL, &IoStatusBlock, (PVOID)buffer, bufferSize, NULL, NULL);

if (!NT_SUCCESS(Status))
{
    InjDbgPrint("[DRV_NAME]: Writing file error");
    return Status;
}

ZwClose(hFile);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top