Ich habe einen Treiber für Windows VM, die Benutzer Space-Apps über IOCTL kommunizieren können. Ich muss eine Struktur dem Wirt aussetzen (mit virtio) und ich habe versucht, virtqueue_add_buf
nach der Initialisierung der Virt Gerät in der EvtDevicePrepareHardware
mit VirtIODeviceInitialize
Funktion. Beim Aufruf von virtqueue_add_buf
wird ein schwerwiegender Fehler angezeigt.Windows kdmf Treiber Virtio aufrufen virtuqueue_add_buf verursacht System fataler Fehler
Unten finden Sie ein Code-Snippet
int TellHost(WDFOBJECT WdfDevice, VirtioQArg *virtioArg)
{
VIO_SG sg;
PDEVICE_CONTEXT context = GetDeviceContext(WdfDevice);
sg.physAddr = MmGetPhysicalAddress(virtioArg);
sg.length = sizeof(VirtioQCArg);
WdfSpinLockAcquire(context->VirtQueueLock);
error = virtqueue_add_buf(context->VirtQueue, &sg, 1, 0, virtioArg, NULL, 0);
// more code ....
WdfSpinLockRelease(context->VirtQueueLock);
}
Der Fehler ich Fatal System Error bekommen ist: 0x000000d1 (0x0000000000000014,0x0000000000000002,0x0000000000000000,0xFFFFF80109FC0637)
Pause Anweisung Ausnahme - Code 80000003 (erste Chance)
und dann windbg ist nicht in der Lage Symbole und Abstürze zu laden, macht meine Debugging-Sitzung nutzlos. Irgendwelche Ideen, wie ich das debuggen kann oder was ich vielleicht vermisse?
windbg Version 10.0.10586.567, Windows 8.1 x64 – Luis