|  |  |  |  | 
p11-kit wraps PKCS#11 modules to manage
		them and customize their functionality so that they are able
		to be shared between multiple callers in the same process.
Each caller that uses the
		p11_kit_modules_load()
		or p11_kit_module_load()
		function gets independent wrapped PKCS#11 module(s). This is unless a caller
		or module configuration specifies that a module should be used in an
		unmanaged fashion.
When modules are managed, the following aspects are wrapped and coordinated:
Calls to C_Initialize and
			C_Finalize can be called by multiple
			callers.
The first time that the managed module
			C_Initialize is called, the PKCS#11 module's actual
			C_Initialize function is called. Subsequent calls by
			other callers will cause p11-kit to increment an
			internal initialization count, rather than calling
			C_Initialize again.
Multiple callers can call the managed
			C_Initialize function concurrently from different
			threads and p11-kit will guarantee that this managed
			in a thread-safe manner.
When the managed module C_Finalize is used
			to finalize a module, each time it is called it decrements the internal
			initialization count for that module. When the internal initialization
			count reaches zero, the module's actual C_Finalize
			function is called.
Multiple callers can call the managed C_Finalize
			function concurrently from different threads and p11-kit
			will guarantee that this managed in a thread-safe manner.
Call to C_CloseAllSessions only close the
			sessions that the caller of the managed module has opened. This allows the
			C_CloseAllSessions function to be used without closing
			sessions for other callers of the same PKCS#11 module.
Managed modules have ability to log PKCS#11 method calls for debugging
			purposes. See the log-calls = yes
			module configuration option.
Managed modules have the ability to be remoted to another machine or
			isolated in their own process.
			See the remote = ...
			module configuration option.