When the WDSServer service is started, the Trivial File Transfer Protocol (TFTP) server reads the configuration settings in the registry that apply to the TFTP server. Note that the TFTP server will not function correctly until it has initialized successfully.
You use the Windows Deployment Services Trivial File Transfer Protocol (TFTP) server to download the files that are needed to do a network boot using the Pre-Boot Execution Environment (PXE). PXE technology is a standard created by Intel that establishes a common and consistent set of pre-boot services within the boot firmware. The end goal is to enable a client to do a network boot and receive a network boot program (NBP) from a network boot server.
The TFTP server downloads boot files such as Pxeboot.com, Wdsnbp.com, Bootmgr.exe, and Default.bcd, as well as the boot image that contains Windows Preinstallation Environment (Windows PE).
You use the Trivial File Transfer Protocol (TFTP) server for Windows Deployment Services to download the files that are needed to do a network boot using the Pre-Boot Execution Environment (PXE). If the registry data is corrupt or the TFTP server does not have sufficient permissions, the TFTP server will not be able to download these files.
To resolve this issue, do the following in the specified order:
Ensure that the registry data is correct.
Ensure that the registry permissions are correct.
To perform these procedures, you must either be a member of the local Administrators group or have been delegated the appropriate authority.
Ensure that the registry data is correct
Caution: Incorrectly editing the registry might severely damage your system. Before making changes to the registry, you should back up any valued data.
To ensure that the registry data is not corrupt:
Open Registry Editor. (Click Start, type regedit in the Start Search box, and then press ENTER.)
Ensure that the WDSTFTP registry key exists at the following location: HKLM\SYSTEM\CurrentControlSet\Services\WDSServer\Providers\WDSTFTP.
If the WDSTFTP registry key is missing or corrupt, you will need to reinitialize the server. To do this, open the Command Prompt window and then run the wdsutil /uninitialize-server command. Next run wdsutil /initialize-server /reminst:<path>, where <path> is the path where you want the RemoteInstall folder to be located.
If the WDSTFTP registry key does not exist, use the procedure in the following section to ensure that the registry permissions are correct.
Ensure that the registry permissions are correct
To ensure that the TFTP server has the correct registry permissions and settings:
Open Registry Editor.
Right-click the HKLM\SYSTEM\CurrentControlSet\Services\WDSServer node, and then click Permissions.
Click SYSTEM, and then make sure that Full Control is selected.
Ensure that the RootFolder setting for the HKLM\SYSTEM\CurrentControlSet\Services\WDSServer\Providers\WDSTFTP registry key exists and that it is set to the correct path. For the Deployment Server, this should be set to the RemoteInstall folder (by default, the RemoteInstall folder is located on drive C). For the Transport Server, this should be set to the folder that contains the files you want to download over TFTP.
Make sure that this folder exists (for example, RemoteInstall).
Make sure that the SYSTEM account has the necessary permissions to read to this folder. To do this, right-click the folder name and then click Permissions. On the Security tab, click SYSTEM, and then make sure that Read is selected.
Restart the WDSServer service.
Target | Microsoft.Windows.Server.2008.WDSRole | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | AvailabilityHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | MatchMonitorHealth | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.Windows.3SingleEventLog3StateUnitMonitorType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.Windows.Server.2008.WDSRole.TFTPInitialization" Accessibility="Public" Enabled="onEssentialMonitoring" Target="Microsoft.Windows.Server.2008.WDSRole" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Windows!Microsoft.Windows.3SingleEventLog3StateUnitMonitorType" ConfirmDelivery="true">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.Windows.Server.2008.WDSRole.TFTPInitialization.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/EventDisplayNumber$</AlertParameter1>
<AlertParameter2>$Data/Context/EventDescription$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="FirstEventRaised" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="SecondEventRaised" HealthState="Warning"/>
<OperationalState ID="Error" MonitorTypeStateID="ThirdEventRaised" HealthState="Error"/>
</OperationalStates>
<Configuration>
<FirstComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</FirstComputerName>
<FirstLogName>Application</FirstLogName>
<FirstExpression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>WDSTFTP</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>256</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</FirstExpression>
<SecondComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</SecondComputerName>
<SecondLogName>Application</SecondLogName>
<SecondExpression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>WDSTFTP</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>260</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</SecondExpression>
<ThirdComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ThirdComputerName>
<ThirdLogName>Application</ThirdLogName>
<ThirdExpression>
<And>
<Expression>
<RegExExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>MatchesRegularExpression</Operator>
<Pattern>^(257|258|259)$</Pattern>
</RegExExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">WDSTFTP</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</ThirdExpression>
</Configuration>
</UnitMonitor>