Branch DP Internals - client side - SCCM 2007

The last post detailed required server side processing to prepare a package for distribution to the Branch DP.  Let's now take a look at what happens on the Branch DP to finally get the content copied to and ready for access by requesting clients.

The last step in server side Branch DP package processing is the creation of policy to notify the Branch DP there is work to do.  This is where we start the processing for this entry.  As we go through this discussion, bear in mind that the Branch DP is simply a component of the SCCM advanced client - so instructions to the Branch DP component come down to the system just like any setting would - through a policy retrieval cycle.

Before receiving policy for Branch DP processing it is assumed that the actual Branch DP functionality has been enabled (Branch DP's must be configured as site systems in order for them to be visible in the package DP list - in this post we assume the branch DP has already been enabled).  It is easy to verify the Branch DP is enabled and ready to receive a package.  Simply check the root\ccm\policy\machine\actualconfig WMI namespace.  Look at the Instances list in the CCM_DistributionPoint namespace.  If the system has been enabled as a Branch DP you will see an entry in the instance list called CCM_DistributionPoint.DummyKey=1.

For this post, we will assume that the Branch DP has been enabled previously.  When the SCCM client hosting the Branch DP performs its normal polling cycle (default ever hour) it will pick up the policy change prepared by the server to notify the Branch DP that it has a package pending download.  Once the policy has been downloaded to the client we will wait for the Branch DP agent policy cycle on the client to take place which will read the new policy in WMI and act to begin the download of the content from any available (meaning a DP that can be accessed and is not restricted due to protected boundaries) standard BITS enabled distribution point.  This is a BITS download and will honor any BITS settings configured in the BITS section of the computer client agent. When the download begins a temp folder is created on the client to store the content (this folder is not accessible to a user of the system).  If problems take place during download this folder will persist.  Assuming all goes well and once download is complete a standard distribution folder will be visible on the client.

Branch DP processing is recorded in the PeerDPAgent and associated logs as follows

PeerDPAgent.log
CPDPJobManager::OnPDPStatusTask
PDP Maintenance Message Body : <?xml version='1.0' ?><PDPScheduledMaintenance MessageType='PDPScheduledMaintenanceTask'> <PDPScheduledMaintenanceAction ActionType='Predefined'> <PDPScheduledMaintenanceActionID> {00000000-0000-0000-0000-000000000109}
Branch DP Schedule Token

</PDPScheduledMaintenanceActionID> <Description>PDP Scheduled Maintenance</Description> </PDPScheduledMaintenanceAction></PDPScheduledMaintenance >
CPDPJobManager::OnMaintainContent
Raising event:
[SMS_CodePage(437), SMS_LocaleID(1033)]
instance of PDPStartMaintenanceTaskAll
{
ClientID = "GUID:EF0FBF55-0F42-4271-B742-BED81D895FA4";
DateTime = "20060725194148.144000+000";
MachineName = "STEVERACPEERDP1";
ProcessID = 2164;
SiteCode = "TOP";
ThreadID = 3424;
};
Successfully submitted event to the Status Agent.
Raising event:
[SMS_CodePage(437), SMS_LocaleID(1033)]
instance of PDPMaintenanceTaskList
{
ClientID = "GUID:EF0FBF55-0F42-4271-B742-BED81D895FA4";
DateTime = "20060725194148.207000+000";
MachineName = "STEVERACPEERDP1";
PackageList = "";
ProcessID = 2164;
SiteCode = "TOP";
ThreadID = 3424;
};
Successfully submitted event to the Status Agent.
Client is not in native mode, internet facing is not supported.
CPDPJobManager::OnPolicyArrived
PDP_CreateJobData
Created Peer DP job {12AC27D9-5D92-4677-8F15-05372686E060} for package TOP00004
CPDPJob::EvaluateState Job is created and processing begins
CPDPJob::PreprocessJob
Drive 'A:\' is not a fixed drive, ignoring. Enumerate drives to see what is available
Drive 'D:\' is not a fixed drive, ignoring.
CPDPJob::CheckForPreStagedPkg
Checking C:\SMSPKGC$\TOP00004 for prestaged TOP00004 package Check to see if package has been
Package TOP00004 has not been prestaged manually copied to Branch DP. If
Package TOP00004 in state 'Starting'. so we will use it.
CPDPJob::EvaluateState
CPDPJob::StartNewJob
CPDPJob::EvaluateDoNotDownloadFlag
Drive 'A:\' is not a fixed drive, ignoring.
CPDPJob::PrepareStagingDir
Temp dowload Path: 'C:\PDPD4DF.tmp' Create our temporary download location for the package
Disconnected 0 users from directory C:\PDPD4DF.tmp
Temp staging directory for package TOP00004 is C:\PDPD4DF.tmp
CPDPJob::InvokeDownload
Calling DownloadContent, the type is 0
Raising event:
[SMS_CodePage(437), SMS_LocaleID(1033)]
instance of PDPDownloadStartedEvent
{
ClientID = "GUID:EF0FBF55-0F42-4271-B742-BED81D895FA4";
DateTime = "20060725194218.629000+000";
MachineName = "STEVERACPEERDP1";
PackageID = "TOP00004";
ProcessID = 2164;
SiteCode = "TOP";
SourceVersion = 2;
ThreadID = 1512;
};
Successfully submitted event to the Status Agent.
Package TOP00004 in state 'Downloading'. Downloading the package - download is actually
CPDPJob::EvaluateState handled by ContentTransferManager component
CPDPJob::ProcessProgress
Download complete for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} , downloaded KB 67 ß---Flags the CTM ID and complete status GUID ID is the ID that will show up in ContentTransferManager log
CPDPJob::DownloadCompleted and can be used to track progress with that component.
Package TOP00004 in state 'DownloadComplete'. Download complete - package ready to use

ContentTransferManager.log
Starting CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} . CTM Job GUID - link between current and
PeerDPAgent log

CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=Starting)
Attempting to persist location request for PackageID='TOP00004' and PackageVersion='2'
LSCreateRequestInWMI
Attempting to create Location Request for PackageID='TOP00004' and Version='2' LocationServices request
Succesfully created Location Request being created
Persisted location request
In LSNapInitializeLocationFilter for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F} . LocationServices
In CCCMNAPLocationHandler::IsSystemInQuarantineState. request ID
System is not in quarantine state.
Attempting to send Location Request for PackageID='TOP00004'
LSCreateRequestMessageBody
Client is not in native mode, internet facing is not supported.
ContentLocationRequest : <ContentLocationRequest SchemaVersion="1.00"><Package ID="TOP00004" Version="2"/><AssignedSite SiteCode="TOP"/><ClientLocationInfo LocationType="SMSPackage" UseProtected="0" AllowCaching="0" BranchDPFlags="1" UseInternetDP="0"><ADSite Name="Default-First-Site-Name"/><IPAddresses><IPAddress SubnetAddress="0.0.0.0" Address="<obscured on purpose>"/><IPAddress SubnetAddress="<obscured on purpose>" Address="<obscured on purpse>"/><IPAddress SubnetAddress="0.0.0.0" Address="0.0.0.0"/><IPAddress SubnetAddress="2002:4135:4153:0000" Address="2002:4135:4153:0000:0000:0000:4135:4153"/></IPAddresses></ClientLocationInfo></ContentLocationRequest>
Created and Sent Location Request '{B246ADF4-F6E3-41A5-82F4-0F2C6387A35F} ' for package TOP00004 LocationServices request ID - link between current and LocationServices log
CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} entered phase CCM_DOWNLOADSTATUS_DOWNLOADING_DATA
Queued location request '{B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}' for CTM job '{5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}'. Log entry showing link between the CTM job ID and LocationServices request ID
We hand off to locationservices here.**
CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=RequestedLocations)
Created CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} for user S-1-5-18
In CLSCallback::LocationUpdateEx
CTM dumping locations returned by Location Service: We have received data base from locationservices
Source: 'https://SMSServer/SMS_DP_SMSPKGC$/TOP00004/' Locality: Remote Version: 5430 Capability: <Capabilities SchemaVersion="1.0"/>
Source: '\\SMSServer\SMSPKGC$\TOP00004\' Locality: Remote Version: 5430 Capability: <Capabilities SchemaVersion="1.0"/>
CCTMJob::UpdateLocations({5AF7E2FA-77F4-42FD-9E9F-31C885477BBF})
CTM_NotifyLocationUpdate
CCTMJob::_PersistLocations
CCTMJob::_DeleteLocations
Persisted location 'https://SMSServer/SMS_DP_SMSPKGC$/TOP00004', Order 0, for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}
Persisted location 'file:\\SMSServer\SMSPKGC$\TOP00004', Order 1, for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}
Persisted locations for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}:
(REMOTE) https://SMSServer/SMS_DP_SMSPKGC$/TOP00004
(REMOTE) file:\\SMSServer\SMSPKGC$\TOP00004
CCTMJob::_GetNextLocation
In CDataTransferService::CDataTransferService
CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} (corresponding DTS job {19AAE742-DFC3-48DF-AE18-A07D5AD7EB8C}) started download from 'https://SMSServer/SMS_DP_SMSPKGC$/TOP00004'
In CDataTransferService::~CDataTransferService
CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=DownloadingData)
CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} successfully completed.
CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=Success)
CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=Complete)
CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF})
CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Cancelling LS job {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}
CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Cancelling DTS job {19AAE742-DFC3-48DF-AE18-A07D5AD7EB8C}
In CDataTransferService::CDataTransferService
spDTS->CancelJob(id), HRESULT=80040215 (e:\buildall\nts\sms\framework\ccmctm\util.cpp,742)
In CDataTransferService::~CDataTransferService
CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Deleting persisted locations
CCTMJob::_DeleteLocations
CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Deleting persisted job
CRemoveJobFromGlobalState::Execute
CCTMJob::~CCTMJob(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF})

LocationServices.log
Created filter for LS request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}. Locationservices gets request
from ContentTransferManager

LSGetSiteCodeFromWMI
LSGetSiteCodeFromWMI : Site code returned from WMI is <TOP>
LSGetADSiteName
Current AD site of machine is Default-First-Site-Name
IPv6 entry points already initialized.
DHCP entry points already initialized.
Adapter {C53880AD-BE51-4DD1-9B8E-6A1DF78CD296} is DHCP enabled. Checking quarantine status.
Adapter {7FD00A16-5286-4C84-BBFF-D2D7307C5EEF} is DHCP enabled. Checking quarantine status.
dwRetVal, HRESULT=80070002 (e:\buildall\nts\sms\framework\ccmutillib\ccmiputil.cpp,379)
Client is not in native mode, internet facing is not supported.
sHost.length()!=0, HRESULT=80040215
Client is not in native mode, internet facing is not supported.
LSGetSiteCodeFromWMI
LSGetSiteCodeFromWMI : Site code returned from WMI is <TOP>
LS Verifying message
CLSReplyLocationsTask::Execute
Processing Location reply message
ContentLocationReply : <ContentLocationReply SchemaVersion="1.00"><Sites><Site><MPSite SiteCode="TOP" MasterSiteCode="TOP" SiteLocality="FALLBACK"/><LocationRecords><LocationRecord><SMBPath Name="\\SMSServer\SMSPKGC$\TOP00004\"/><URL Name="https://SMSServer/SMS_DP_SMSPKGC$/TOP00004/"/><ADSite Name="Default-First-Site-Name"/><IPSubnets><IPSubnet Address="172.29.8.0"/><IPSubnet Address=""/></IPSubnets><Metric Value=""/><Version>5430</Version><Capabilities SchemaVersion="1.0"/><ServerRemoteName>SMSServer</ServerRemoteName><DPType>SERVER</DPType></LocationRecord></LocationRecords></Site></Sites></ContentLocationReply>
LSGetContentPoints
Job requires both local and remote locations
HTTP download has been specified
SMB download has been specified
Request is for a PeerDP download
LSGetADSiteName
Current AD site of machine is Default-First-Site-Name
IPv6 entry points already initialized.
DHCP entry points already initialized.
Adapter {C53880AD-BE51-4DD1-9B8E-6A1DF78CD296} is DHCP enabled. Checking quarantine status.
Adapter {7FD00A16-5286-4C84-BBFF-D2D7307C5EEF} is DHCP enabled. Checking quarantine status.
dwRetVal, HRESULT=80070002 (e:\buildall\nts\sms\framework\ccmutillib\ccmiputil.cpp,379)
Invoking LSInvokeCallback with list of content locations
LSInvokeCallback
In CLSCallback::CLSCallback
Calling back with the following distribution points
Distribution Point='https://SMSServer/SMS_DP_SMSPKGC$/TOP00004/', Locality='REMOTE',
DPType='SERVER', Version='5430', Capabilities='<Capabilities SchemaVersion="1.0"/>' LocationServices
7/25/2006 2:42:18 PM 1192 (0x04A8)
Distribution Point='\\SMSServer\SMSPKGC$\TOP00004\', Locality='REMOTE', DPType='SERVER',
Version='5430', Capabilities='<Capabilities SchemaVersion="1.0"/>'
In LSNapApplyLocationFilter for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}.
In CCCMNAPLocationHandler::FilterLocations.
Filtering locations for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}.
In CCCMNAPLocationHandler::IsSystemInQuarantineState.
Machine is not in quarantine. No need to filter.
In CLSCallback::~CLSCallback
Calling back with locations for location request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}
Returning locations to ContentTransferManager
CCCMPkgLocation::CancelLocationRequest
In LSNapDeleteLocationFilter for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}
In CCCMNAPLocationHandler::RemoveFilter.
Attempting to cancel location filter for requestID={B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}
Found matching filter for requestID={B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}

Reviewing WMI to see job details may also be helpful. All Branch DP jobs are stored in the root\ccm\PeerDPAgent namespace - an example is shown below.

Branch DP Job - WMI

It may also be helpful to review the actual policy pending download by the Branch DP. The screenshot below is from the policyspy tool.

Branch DP Policy - PolicySpy