Export (0) Print
Expand All

Chaining Multiple Third-Party DLLs

It is important to recognize that Microsoft DHCP Server stops searching for additional third-party DLLs once a DLL has been successfully loaded. To facilitate multiple simultaneous DLL calls from a given event, Microsoft DHCP Server passes the remaining list of third-party DLLs in its call to the DhcpServerCalloutEntry function, and expects the loaded third-party DLL to perform the necessary processing of additional third-party DLLs, and then return a cumulative set of requested calls.

For example, if one third-party DLL is registered for notification upon the arrival of a new DHCP packet, and another DLL is being called upon the deletion of a client and the sending of a packet, the DHCP_CALLOUT_TABLE function returned to Microsoft DHCP Server would include pointers in these members:

If those were the only events for which notification was required, those three members of DHCP_CALLOUT_TABLE would contain function pointers to the appropriate third-party DLL, and the rest of the members would be NULL.

Another situation that third-party DLL developers must accommodate is notification of multiple third-party DLLs for the same event. This situation requires the initially loaded third-party DLL to maintain a table of its own — similar in functionality to the internal table maintained by Microsoft DHCP Server — that lists additional functions to be called upon notification of a given DHCP Server event. The initially loaded third-party DLL is expected to call all other third-party DLLs requesting notification for a given event, and then return their function call, as appropriate.

For example, three properly registered third-party DLLs have been developed to register for notification upon the arrival of a new DHCP packet. The initially loaded third-party DLL, firstDLL,is the only third-party DLL loaded by the Microsoft DHCP Server.

Upon loading, Microsoft DHCP Server provided information about the other two third-party DLLs, secondDLL and thirdDLL, and firstDLL was able to load them and retrieve their requested notification information.

Upon notification of the arrival of a new packet, that Microsoft DHCP Server provides by calling firstDLL's DhcpNewPktHook function, firstDLL consults its table and finds that secondDLL and thirdDLL also require notification of the arrival of a new packet. Before returning to Microsoft DHCP Server, firstDLL can call the DhcpNewPktHook function for secondDLL and thirdDLL, and then return from its own function to Microsoft DHCP Server.

 

 

Community Additions

ADD
Show:
© 2014 Microsoft