The structure that defines a component within WinGate. Instances of ComponentEntry are passed into calls to RegisterComponent
struct ComponentEntry { unsigned long dwSize; // size of this structure GUID guid; // UUID of the component WCHAR szName[COMPONENT_MAXNAME + 1]; // display name of the component unsigned long dwComponentVersion; // version of the component for version checking modules etc bool bPublic; // is this component public? HostComponentHandle hHostPrivate; // context handle used by Host to associate with the component ComponentContextHandle hComponentPrivate; // context handle used by component to associate with the Host QueryInitInterfacesFunc QueryInitInterfaces; // OPTIONAL: query a component to see if its dependencies for initialisation are met InitInterfacesFunc InitInterfaces; // OPTIONAL: triggers registration of interfaces, if you have any, you need this ObtainInterfaceFunc ObtainInterface; // OPTIONAL: requests an interface NotifyFunc Notify; // OPTIONAL: receives notifications, should be NULL if notifications not required StartFunc Start; // OPTIONAL: start a component service. StopFunc Stop; // OPTIONAL: stop a component service StoreFunc Store; // OPTIONAL: Store a component configuration LoadFunc Load; // OPTIONAL: Load a component configuration }; |
The size in bytes of the ComponentEntry structure. |
The UUID of the component. |
The null-terminated name of the component that's displayed to the user. |
The version number of the component. This value is displayed in the Modules panel inside the WinGate Management Console. |
Specifies whether this component is public. Public components will notify other modules of their existence via their own ComponentEntry.Notify callback. |
Used by the framework internally. Do not modify. |
A space for some private data to be stored by your component for access in functions that pass you a ComponentEntry * such as Notify and InitInterfaces among others. |
Pointer to the function to query whether the interfaces for the component can be initialised. See Remarks |
Pointer to the function that initialises the component's interfaces. This will not be called by the framework unless ComponentEntry.QueryInitInterfaces has returned true; |
TODO: |
Pointer to the function that receives notifications from the framework. |
Starts the component |
Stops the component |
Instructs the component that it needs to store its configuration. |
Instructs the component that it needs to refresh its configuration. |
Before a component has its interfaces initialised by a call to InitInterfaces, QueryInitInterfaces is called to see whether it is ready. A component can use this to wait until all components it is dependent on have had their interfaces initialised first. The general flow if component interface initialisation is as follows:
ComponentEntry.QueryInitInterfaces