I am developer of an open source project ndiswrapper (http://ndiswrapper.sourceforge.net) that enables users in Linux to use Windows drivers for (wireless) network cards.
Using ndiswrapper with driver for PRO/1000 network card, I noticed couple of issues (although this card has open source drivers, I decided to use ndiswrapper to see how well both work). With the latest 64-bit driver for XP (version Intel,04/13/2007,126.96.36.199), under 64-bit Linux, everything seems to work. However, during resume (from S3), when MiniportSetInformation is called to set power (OID_PNP_SET_POWER), the driver calls NdisMSleep (with 10000 us, 20000 us and 15000 us, successively) before MiniportSetInformation returns. However, MiniportSetInformation runs at DISPATCH_LEVEL, where sleep is not allowed. This causes Linux kernel to issue 'scheduling while atomic' warning. This, I believe, is a bug in Windows driver - if it needs to wait, it could return NDIS_STATUS_PENDING to MiniportSetInformation and can then call NdisSleep when it is at PASSIVE_LEVEL.
Another issue is that the latest 32-bit driver for XP (version 04/13/2007,188.8.131.52) and ndiswrapper under 32-bit, causes the first call to MiniportHandleInterrupt to crash kernel. It seems to refer to an uninitialized field. This could very well be due to ndiswrapper and not XP driver, in which case, I would like to know what it is so this can be fixed in ndiswrapper.
Neither of these issues is relevant to using e1000 in Linux, but I am posting them here so you can improve Windows drivers. For more information, feel free to followup or email me.