VOID
FORCEINLINE
IopQueueThreadIrp(
IN PIRP Irp
)
/*++
Routine Description:
This routine queues the specified I/O Request Packet (IRP) to the thread
whose TCB address is stored in the packet.
Arguments:
Irp - Supplies the IRP to be queued for the specified thread.
Return Value:
None.
--*/
{
PETHREAD Thread;
PLIST_ENTRY Head, Entry;
Thread = Irp->Tail.Overlay.Thread;
Head = &Thread->IrpList;
Entry = &Irp->ThreadListEntry;
KeEnterGuardedRegionThread (&Thread->Tcb);
InsertHeadList( Head,
Entry );
KeLeaveGuardedRegionThread (&Thread->Tcb);
}
上面一段是M$的Windows Research Kernel的源代码wrk-v1.2\base\ntos\io\iopcmn.h里面的一段(M$似乎对开源感兴趣了告)估计你用的XP内核里面也有这段代码编译的程序也说不定。。。
M$比较喜欢把函数的参数叠起来。。
if (ExCmosClockIsSane
&& HalQueryRealTimeClock(&TimeFields)) {
if (YearOverrideOption) {
TimeFields.Year = (SHORT)CurrentYear;
}
RtlTimeFieldsToTime(&TimeFields, &CmosTime);
if ( !ExpRealTimeIsUniversal ) {
UniversalTime.QuadPart = CmosTime.QuadPart + ExpTimeZoneBias.QuadPart;
}
KeSetSystemTime(&UniversalTime, &OldTime, TRUE, NULL);
}
这个是initos.c里面的一段,注意if后面花括号的位置
另外M$跟Linux内核代码最大的一个区别就是变量名函数名Linux喜欢用小写和下划线M$喜欢用大写字母区分单词
比如上面代码里的CurrentYear
Linux喜欢写成current_year
[[it] 本帖最后由 lingluoz 于 2008-2-5 10:37 编辑 [/it]]