阅读:1929回复:6
问源码里几个函数的作用
我来发分!
1.RtlMoveMomery函数执行了什么? pIrpStack = IoGetCurrentIrpStackLocation( Irp ); pNextIrpSp = IoGetNextIrpStackLocation( Irp ); RtlMoveMemory( pNextIrpSp, pIrpStack, sizeof( IO_STACK_LOCATION ) ); 2.IoSetCompletionRoutine函数第二个参数为NULL是什么意思啊? IoSetCompletionRoutine( Irp, NULL, NULL, FALSE, FALSE, FALSE ); 3.Ex***SpinLock这几个函数是做什么的? ExAcquireSpinLock( &gControlDeviceStateLock, &oldIrql ); …… ExReleaseSpinLock( &gControlDeviceStateLock, oldIrql ); |
|
沙发#
发布于:2003-08-18 22:21
1,相当于复制的意思,把当前的IO栈单元复制一份到下一个栈单元
2:第二个参数是完成例程的入口地址,是个函数指针 3:这几个函数是子旋锁函数,是用来同步的,使操作串行话,谁持有它, 谁就有权对内存段执行预定的操作。 |
|
板凳#
发布于:2003-08-19 09:18
还是你好啊,肯教我
1.我查了MSDN,大概也看明白这是一个复制操作,我不明白它这样的目的,那不是栈里有两个重复的?是不是复制一份传给自己建的这个设备? 2.如果函数是NULL,那是不是说没有完成例程? |
|
地板#
发布于:2003-08-19 09:26
为什么不先看看ddk的help文档呢?
|
|
|
地下室#
发布于:2003-08-19 09:36
DDK和IFS的文档我都开着的,不过实在太厚了,:P
我更多是看一些源码学习 |
|
5楼#
发布于:2003-08-19 09:37
和我这个问题比较接近的内容在DDK的哪个目录呢?
大侠能不能指点一下,帮我缩小学习范围? |
|
6楼#
发布于:2003-10-18 10:22
ExAcquireSpinLock( &gControlDeviceStateLock, &oldIrql );
…… ExReleaseSpinLock( &gControlDeviceStateLock, oldIrql ); 只在多CPU下有用,在单CPU下只是把IRQL提升到DISPATCH_LEVEL,你可以反汇编NTOSKRNL中的代码看看. |
|
|