Sunday, February 21, 2010

Booting a WinPE RIS based image with an Intel NIC

Currently the way we deploy workstations at my company is we load a WinPE image via RIS and then we utilize SMS OSD. Why are we still using RIS you ask? RIS used to be our primary deployment tool but now it’s just used as a PXE server which will be retired once we move to SCCM 2007. Every once in a while a workstation would fail during the initialization of our WinPE boot image. We were able to determine that this only happened on machines that had an Intel based NIC and the error that we received had to do with parsing of the driver .inf file. We found a post that referenced a Microsoft KB article (http://support.microsoft.com/kb/923831) about problems parsing the Intel driver .inf file during the WinPE boot process. In the .inf file there is a section called Minihelp which has a series of entries that contain long strings. These long strings couldn’t be parsed correctly causing the imaging process to fail. The solution – replace these long strings with a single character, any character. I went in and made this change in all of my Intel .inf driver files and the problem has not surfaced since.

Before:

; Minihelp


FlowControlMiniHelp = "Pauses packet transmission on receipt of full flow control frame and sends full flow control frame to notify the other side to stop transmission."
AutoNegMiniHelp = "The adapter can either negotiate with its link partner or force the speed and duplex. The link partner must match the setting chosen!"
AutoNegAdvertisedMiniHelp = "This can be used to restrict the speeds and duplexes advertised to a link partner during autonegotiation."
ChecksumTxTcpMiniHelp = "Allows the adapter to compute TCP or UDP checksum of transmitted packets. May improve TCP and UDP transmit performance."
ChecksumRxTcpMiniHelp = "Allows the adapter to verify the TCP checksum of incoming packets. May improve TCP receive performance."
ChecksumTxIpMiniHelp = "Allows the adapter to compute IP checksum of transmitted packets. May improve IP transmit performance."
ChecksumRxIpMiniHelp = "Allows the adapter to verify the IP checksum of incoming packets. May improves IP receive performance."
TcpSegmentationMiniHelp = "Allows the adapter to offload the task of segmenting TCP messages. May improve CPU utilization."
NumRxDescriptorsMiniHelp = "Sets the number of buffers the driver uses when copying data to protocol memory. Increasing this value can enhance receive performance, but also consumes system memory. Use the default if performance is not an issue."
NumTxDescriptorsMiniHelp = "Sets the number of data segments that enable the adapter to track transmit packets. Increasing this value can improve transmit performance, but also consumes system memory. Use the default if performance is not an issue."
JumboFramesMiniHelp = "Enables sending larger Ethernet packets on gigabit networks."
TaggingModeMiniHelp = "Enables sending and receiving of IEEE Tagged frames (802.3ac/802.1p/802.1Q), which include priority and VLAN indicators."
LAAMiniHelp = "Allows you to configure a custom MAC address for the adapter."
EnablePMEHelp = "Enables/disables wake-up from Advanced Power Management (APM) sleep states."
WakeOnHelp = "Determines how to wake the system."
WakeOnLinkHelp = "Allows wake-up from APM power management when link is reconnected."
LogLinkStateMiniHelp = "Enables/disables recording of the link state message to the Event Viewer."
SmartPowerDownMiniHelp = "Minimizes power consumption by enabling the adapter to enter a deep sleep mode when it does not have a valid link or when the operating system is in Suspend mode."
ITRMiniHelp = "Determines rate at which the controller moderates interrupts. Default is optimized for common configurations. Changing this setting may improve performance for some configurations."
MasterSlaveModeMiniHelp = "Determines IEEE 802.3ab Master-Slave resolution during gigabit auto-negotiation. Default is recommended for most configurations. Forcing a setting can break link if partner is not configured correctly."
WaitAutoNegCompleteMiniHelp = "Determines whether the driver waits for link to be detected before finishing initialization. Select Auto Detect to let the driver control the setting for copper or fiber adapters."
RssModeMiniHelp = "Distribute packet receive processing over 2 processors."
 
After:
 
; Minihelp


FlowControlMiniHelp = "h"
AutoNegMiniHelp = "h"
AutoNegAdvertisedMiniHelp = "h"
ChecksumTxTcpMiniHelp = "h"
ChecksumRxTcpMiniHelp = "h"
ChecksumTxIpMiniHelp = "h"
ChecksumRxIpMiniHelp = "h"
TcpSegmentationMiniHelp = "h"
NumRxDescriptorsMiniHelp = "h"
NumTxDescriptorsMiniHelp = "h"
JumboFramesMiniHelp = "h"
TaggingModeMiniHelp = "h"
LAAMiniHelp = "h"
EnablePMEHelp = "h"
WakeOnHelp = "h"
WakeOnLinkHelp = "h"
LogLinkStateMiniHelp = "h"
SmartPowerDownMiniHelp = "h"
ITRMiniHelp = "h"
MasterSlaveModeMiniHelp = "h"
WaitAutoNegCompleteMiniHelp = "h"
RssModeMiniHelp = "h"