Is is possible to merge two disk Irps into one Irp without memory copying? I tried allocating a new Irp and new MDLs, and copying the MDL of two requests and let the last mdl of the first request point to the mdl of the second request. But it seems to crash in PCIIDE driver. Just wondering if it is possible to do it.
MODULE_NAME: PCIIDEX
FAULTING_MODULE: fffff80001a17000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 4a5bc114
READ_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
fffffc30639000e8
CURRENT_IRQL: 2
FAULTING_IP:
nt!KeFlushQueuedDpcs+2093
fffff800`01a41897 488b4128 mov rax,qword ptr [rcx+28h]
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
BUGCHECK_STR: 0xA
LAST_CONTROL_TRANSFER: from fffff80001b7ed92 to fffff80001a8f490
STACK_TEXT:
fffff88003778718 fffff800
01b7ed92 : fffffc30639000e8 fffffa80
0d207b60 0000000000000065 fffff800
01ad3178 : nt!DbgBreakPointWithStatus
fffff88003778720 fffff800
01b7fb7e : 0000000000000003 00000000
00000000 fffff80001ad39d0 00000000
0000000a : nt!HeadlessDispatch+0x192
fffff88003778780 fffff800
01a97744 : fffff8800377985c 00000000
00000065 0000000000000003 fffff800
01a41790 : nt!KeEnterKernelDebugger+0x76e
fffff88003778e50 fffff800
01a96be9 : 000000000000000a fffffc30
639000e8 0000000000000002 00000000
00000000 : nt!KeBugCheckEx+0x104
fffff88003778e90 fffff800
01a95860 : 0000000000000000 00000000
00000000 0000000000000000 fffff6fb
7dbf1000 : nt!KeSynchronizeExecution+0x3d59
fffff88003778fd0 fffff800
01a41897 : 0000000000000000 00000000
00000000 fffffa8000001f80 00000000
00000000 : nt!KeSynchronizeExecution+0x29d0
fffff88003779160 fffff800
01a9576e : 0000000000000001 00000000
00000001 fffffa80100430b0 fffff880
00b40000 : nt!KeFlushQueuedDpcs+0x2093
fffff880037792c0 fffff800
01a99740 : fffff80002003e08 fffff880
00b40000 0000000000000002 fffffa80
0fd8ec20 : nt!KeSynchronizeExecution+0x28de
fffff88003779458 fffff800
02003e08 : fffff88000b40000 00000000
00000002 fffffa800fd8ec20 fffffa80
0cfceea0 : nt!RtlCopyMemoryNonTemporal+0x40
fffff88003779460 fffff800
02003593 : fffffa800cfceea0 fffffa80
0cfcee00 0000000000000000 00000000
00000000 : hal!HalMakeBeep+0x1b40
fffff88003779510 fffff800
020064fb : fffffa80297f0988 fffffa80
0cfceea0 fffffa800fd8ec20 fffff880
037796a0 : hal!HalMakeBeep+0x12cb
fffff88003779560 fffff800
02006472 : fffffa80297f0988 fffffa80
297f0980 0000000000001000 00000000
00000000 : hal!IoMapTransfer+0x117
fffff880037795f0 fffff800
0200594f : 0000000000000000 fffff800
02002fb9 0000000000000000 00000000
00000010 : hal!IoMapTransfer+0x8e
fffff88003779630 fffff800
0200613d : fffffa800cd871a0 fffffa80
0cfceea0 000000006c646d01 00000000
0000f000 : hal!HalFreeCommonBuffer+0x67b
fffff880037796d0 fffff800
0200571f : fffffa80297f0940 00000000
00010000 fffffa800cfceea0 fffffa80
0fd8ec20 : hal!HalAllocateAdapterChannel+0x101
fffff88003779710 fffff880
011f10d3 : fffffa80297f08a0 fffff880
011f112c fffff800000001c0 00000000
00000246 : hal!HalFreeCommonBuffer+0x44b
fffff88003779780 fffff880
01303b53 : fffffa80297f08a0 fffffa80
297f08a0 fffffa800cd961a0 fffffa80
297f08a0 : PCIIDEX+0x10d3
fffff880037797e0 fffff880
01302803 : fffffa800cd97500 fffffa80
297f08a0 fffffa800cd97500 fffffa80
0cd961a0 : ataport!AtaPortInitialize+0x47df
fffff88003779810 fffff880
01302668 : 0000000000000001 00000000
00000000 0000000000000000 00000000
00000000 : ataport!AtaPortInitialize+0x348f
fffff88003779890 fffff880
013039fa : fffffa800cd961a0 00000000
00000000 0000000000000103 fffff800
01c1e6c8 : ataport!AtaPortInitialize+0x32f4
fffff88003779950 fffff880
012ff4ee : 0000000000000000 fffffa80
297f08a0 0000000000000001 fffffa80
0fa78e60 : ataport!AtaPortInitialize+0x4686
fffff88003779980 fffff880
0190d445 : 0000000000000000 00000000
00000001 fffffa800fa78e60 000000fe
ecb68000 : ataport!AtaPortInitialize+0x17a
fffff880037799b0 fffff880
0190d975 : fffffa800d914010 fffffa80
0cfe5060 0000000000020000 00000000
00000000 : CLASSPNP+0x1445
fffff88003779a50 fffff880
011640af : fffffa801019a7a0 00000000
00000080 fffffa801019a990 00000000
000007ff : CLASSPNP+0x1975
fffff88003779aa0 fffff880
0117918c : fffffa800d1feb20 fffffa80
1019a7a0 fffffa8000000001 00000000
00000001 : partmgr+0x10af
fffff88003779ad0 fffff880
01876108 : 0000000000000080 fffffa80
0d91b190 fffffa801019a7a0 00000000
000ffe01 : volmgr+0x118c
fffff88003779b10 fffff880
018e6ed3 : 0000000000000080 fffffa80
0cddd040 fffffa800d1efc90 00000000
00000138 : volsnap+0x1108
fffff88003779b60 fffff880
018e768a : fffffa80297bc4d0 fffffa80
29780010 0000000000000000 fffffa80
0d207b60 : MyDriver!SendRequest+0xf3
The storage stack doesn’t support chained mdls.
d
Bent from my phone
From: ren.j@263.netmailto:ren.j
Sent: ?4/?22/?2013 7:26 AM
To: Windows System Software Devs Interest Listmailto:xxxxx
Subject: [ntdev] Merge Irp without memory copying?
Is is possible to merge two disk Irps into one Irp without memory copying? I tried allocating a new Irp and new MDLs, and copying the MDL of two requests and let the last mdl of the first request point to the mdl of the second request. But it seems to crash in PCIIDE driver. Just wondering if it is possible to do it.
MODULE_NAME: PCIIDEX
FAULTING_MODULE: fffff80001a17000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 4a5bc114
READ_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
fffffc30639000e8
CURRENT_IRQL: 2
FAULTING_IP:
nt!KeFlushQueuedDpcs+2093
fffff80001a41897 488b4128 mov rax,qword ptr [rcx+28h]<br><br>DEFAULT_BUCKET_ID: WRONG_SYMBOLS<br><br>BUGCHECK_STR: 0xA<br><br>LAST_CONTROL_TRANSFER: from fffff80001b7ed92 to fffff80001a8f490<br><br>STACK_TEXT:<br>fffff880
03778718 fffff80001b7ed92 : fffffc30
639000e8 fffffa800d207b60 00000000
00000065 fffff80001ad3178 : nt!DbgBreakPointWithStatus<br>fffff880
03778720 fffff80001b7fb7e : 00000000
00000003 0000000000000000 fffff800
01ad39d0 000000000000000a : nt!HeadlessDispatch+0x192<br>fffff880
03778780 fffff80001a97744 : fffff880
0377985c 0000000000000065 00000000
00000003 fffff80001a41790 : nt!KeEnterKernelDebugger+0x76e<br>fffff880
03778e50 fffff80001a96be9 : 00000000
0000000a fffffc30639000e8 00000000
00000002 0000000000000000 : nt!KeBugCheckEx+0x104<br>fffff880
03778e90 fffff80001a95860 : 00000000
00000000 0000000000000000 00000000
00000000 fffff6fb7dbf1000 : nt!KeSynchronizeExecution+0x3d59<br>fffff880
03778fd0 fffff80001a41897 : 00000000
00000000 0000000000000000 fffffa80
00001f80 0000000000000000 : nt!KeSynchronizeExecution+0x29d0<br>fffff880
03779160 fffff80001a9576e : 00000000
00000001 0000000000000001 fffffa80
100430b0 fffff88000b40000 : nt!KeFlushQueuedDpcs+0x2093<br>fffff880
037792c0 fffff80001a99740 : fffff800
02003e08 fffff88000b40000 00000000
00000002 fffffa800fd8ec20 : nt!KeSynchronizeExecution+0x28de<br>fffff880
03779458 fffff80002003e08 : fffff880
00b40000 0000000000000002 fffffa80
0fd8ec20 fffffa800cfceea0 : nt!RtlCopyMemoryNonTemporal+0x40<br>fffff880
03779460 fffff80002003593 : fffffa80
0cfceea0 fffffa800cfcee00 00000000
00000000 0000000000000000 : hal!HalMakeBeep+0x1b40<br>fffff880
03779510 fffff800020064fb : fffffa80
297f0988 fffffa800cfceea0 fffffa80
0fd8ec20 fffff880037796a0 : hal!HalMakeBeep+0x12cb<br>fffff880
03779560 fffff80002006472 : fffffa80
297f0988 fffffa80297f0980 00000000
00001000 0000000000000000 : hal!IoMapTransfer+0x117<br>fffff880
037795f0 fffff8000200594f : 00000000
00000000 fffff80002002fb9 00000000
00000000 0000000000000010 : hal!IoMapTransfer+0x8e<br>fffff880
03779630 fffff8000200613d : fffffa80
0cd871a0 fffffa800cfceea0 00000000
6c646d01 000000000000f000 : hal!HalFreeCommonBuffer+0x67b<br>fffff880
037796d0 fffff8000200571f : fffffa80
297f0940 0000000000010000 fffffa80
0cfceea0 fffffa800fd8ec20 : hal!HalAllocateAdapterChannel+0x101<br>fffff880
03779710 fffff880011f10d3 : fffffa80
297f08a0 fffff880011f112c fffff800
000001c0 0000000000000246 : hal!HalFreeCommonBuffer+0x44b<br>fffff880
03779780 fffff88001303b53 : fffffa80
297f08a0 fffffa80297f08a0 fffffa80
0cd961a0 fffffa80297f08a0 : PCIIDEX+0x10d3<br>fffff880
037797e0 fffff88001302803 : fffffa80
0cd97500 fffffa80297f08a0 fffffa80
0cd97500 fffffa800cd961a0 : ataport!AtaPortInitialize+0x47df<br>fffff880
03779810 fffff88001302668 : 00000000
00000001 0000000000000000 00000000
00000000 0000000000000000 : ataport!AtaPortInitialize+0x348f<br>fffff880
03779890 fffff880013039fa : fffffa80
0cd961a0 0000000000000000 00000000
00000103 fffff80001c1e6c8 : ataport!AtaPortInitialize+0x32f4<br>fffff880
03779950 fffff880012ff4ee : 00000000
00000000 fffffa80297f08a0 00000000
00000001 fffffa800fa78e60 : ataport!AtaPortInitialize+0x4686<br>fffff880
03779980 fffff8800190d445 : 00000000
00000000 0000000000000001 fffffa80
0fa78e60 000000feecb68000 : ataport!AtaPortInitialize+0x17a<br>fffff880
037799b0 fffff8800190d975 : fffffa80
0d914010 fffffa800cfe5060 00000000
00020000 0000000000000000 : CLASSPNP+0x1445<br>fffff880
03779a50 fffff880011640af : fffffa80
1019a7a0 0000000000000080 fffffa80
1019a990 00000000000007ff : CLASSPNP+0x1975<br>fffff880
03779aa0 fffff8800117918c : fffffa80
0d1feb20 fffffa801019a7a0 fffffa80
00000001 0000000000000001 : partmgr+0x10af<br>fffff880
03779ad0 fffff88001876108 : 00000000
00000080 fffffa800d91b190 fffffa80
1019a7a0 00000000000ffe01 : volmgr+0x118c<br>fffff880
03779b10 fffff880018e6ed3 : 00000000
00000080 fffffa800cddd040 fffffa80
0d1efc90 0000000000000138 : volsnap+0x1108<br>fffff880
03779b60 fffff880018e768a : fffffa80
297bc4d0 fffffa8029780010 00000000
00000000 fffffa80`0d207b60 : MyDriver!SendRequest+0xf3
—
NTDEV is sponsored by OSR
OSR is HIRING!! See http://www.osr.com/careers
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer</mailto:xxxxx></mailto:ren.j>