Question

Je travaille sur un filtre clavier Windows pilote et je dois écrire dans un fichier. J'ai essayé d'utiliser zwcreate, zwwrite et zwclose mais le pilote ne fonctionne pas à PASSIVE_LEVEL et je suis arrivé le BSOD. Je ne l'ai jamais écrit un pilote de fenêtres avant. Merci pour l'aide!

EDIT: Merci J. Passant

Était-ce utile?

La solution

Calendrier workitems (IoAllocateWorkItem / IoQueueWorkItem) et gérer tous les fichiers d'E / S dans les routines de rappel WORKITEM.

  

Je ne suis pas sûr que ce soit une bonne idée de laisser l'écriture du pilote du noyau dans un fichier en premier lieu. La meilleure façon de le faire à mon humble avis est de fournir un programme de l'espace utilisateur qui communique avec le pilote, récupère les données et écrit ensuite sur le disque.

Ceci est vrai pour Unix, mais pas pour Windows.

Autres conseils

Un merveilleux exemple pour l'utilisation ZW-outils pour écrire des fichiers est Klog de Clandestiny un pilote de périphérique trouvé à rootkit.com . Il est actuellement me aide beaucoup.

Et bien, je suis d'accord avec un peu Johannes qu'il n'est pas conseillé de le faire userland travail classique (fichier / net /...- accès) directement à partir d'un conducteur. Non seulement il est sujettes aux erreurs, il est peut aussi rompre à l'avenir imprévisible. Les interfaces utilisateur sont normalement beaucoup plus stable et résistant.

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top