#include<kcreddbinternal.h>
static int kcdb_config_loaded = 0;
static CRITICAL_SECTION cs_kcdb_global;
void KHMAPI kcdb_msg_completion(kmq_message * m);
void kcdb_init(void) {
InitializeCriticalSection(&cs_kcdb_global);
kmq_set_completion_handler(KMSG_KCDB, kcdb_msg_completion);
kcdb_credtype_init();
kcdbint_ident_init();
kcdb_credset_init();
kcdb_cred_init();
kcdb_type_init();
kcdb_attrib_init();
}
void kcdb_exit(void) {
kcdb_attrib_exit();
kcdb_type_exit();
kcdb_cred_exit();
kcdb_credset_exit();
kcdbint_ident_exit();
kcdb_credtype_exit();
kmq_set_completion_handler(KMSG_KCDB, NULL);
DeleteCriticalSection(&cs_kcdb_global);
}
khm_handle kcdb_get_config(void) {
khm_handle space = NULL;
EnterCriticalSection(&cs_kcdb_global);
if(!kcdb_config_loaded) {
khc_load_schema(NULL, schema_kcdbconfig);
kcdb_config_loaded = 1;
}
khc_open_space(NULL, L"KCDB", 0, &space);
LeaveCriticalSection(&cs_kcdb_global);
return space;
}
void KHMAPI kcdb_msg_completion(kmq_message * m) {
if(!m)
return;
if(m->subtype == KMSG_KCDB_IDENT)
kcdbint_ident_msg_completion(m);
else if(m->subtype == KMSG_KCDB_ATTRIB)
kcdb_attrib_msg_completion(m);
else if(m->subtype == KMSG_KCDB_TYPE)
kcdb_type_msg_completion(m);
else if(m->subtype == KMSG_KCDB_CREDTYPE)
kcdb_credtype_msg_completion(m);
}