mirror of
https://github.com/tnodir/fort
synced 2024-11-15 12:26:26 +00:00
Driver: Minor fixes.
This commit is contained in:
parent
237ea2a1b9
commit
dbd92f17b1
@ -28,6 +28,22 @@ typedef struct fort_conf_exe_node
|
|||||||
tommy_key_t path_hash;
|
tommy_key_t path_hash;
|
||||||
} FORT_CONF_EXE_NODE, *PFORT_CONF_EXE_NODE;
|
} FORT_CONF_EXE_NODE, *PFORT_CONF_EXE_NODE;
|
||||||
|
|
||||||
|
static FORT_TIME fort_current_time(void)
|
||||||
|
{
|
||||||
|
TIME_FIELDS tf;
|
||||||
|
LARGE_INTEGER system_time, local_time;
|
||||||
|
|
||||||
|
KeQuerySystemTime(&system_time);
|
||||||
|
ExSystemTimeToLocalTime(&system_time, &local_time);
|
||||||
|
RtlTimeToTimeFields(&local_time, &tf);
|
||||||
|
|
||||||
|
FORT_TIME time;
|
||||||
|
time.hour = (UCHAR) tf.Hour;
|
||||||
|
time.minute = (UCHAR) tf.Minute;
|
||||||
|
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
FORT_API void fort_device_conf_open(PFORT_DEVICE_CONF device_conf)
|
FORT_API void fort_device_conf_open(PFORT_DEVICE_CONF device_conf)
|
||||||
{
|
{
|
||||||
KeInitializeSpinLock(&device_conf->ref_lock);
|
KeInitializeSpinLock(&device_conf->ref_lock);
|
||||||
@ -344,7 +360,7 @@ FORT_API PFORT_CONF_REF fort_conf_ref_take(PFORT_DEVICE_CONF device_conf)
|
|||||||
KeAcquireInStackQueuedSpinLock(&device_conf->ref_lock, &lock_queue);
|
KeAcquireInStackQueuedSpinLock(&device_conf->ref_lock, &lock_queue);
|
||||||
{
|
{
|
||||||
conf_ref = device_conf->ref;
|
conf_ref = device_conf->ref;
|
||||||
if (conf_ref) {
|
if (conf_ref != NULL) {
|
||||||
++conf_ref->refcount;
|
++conf_ref->refcount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -360,33 +376,34 @@ FORT_API FORT_CONF_FLAGS fort_conf_ref_set(PFORT_DEVICE_CONF device_conf, PFORT_
|
|||||||
|
|
||||||
const PFORT_CONF_REF old_conf_ref = fort_conf_ref_take(device_conf);
|
const PFORT_CONF_REF old_conf_ref = fort_conf_ref_take(device_conf);
|
||||||
|
|
||||||
|
if (old_conf_ref != NULL) {
|
||||||
|
old_conf_flags = old_conf_ref->conf.flags;
|
||||||
|
} else {
|
||||||
|
RtlZeroMemory(&old_conf_flags, sizeof(FORT_CONF_FLAGS));
|
||||||
|
old_conf_flags.prov_boot = fort_device_flag(device_conf, FORT_DEVICE_PROV_BOOT) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
KeAcquireInStackQueuedSpinLock(&device_conf->ref_lock, &lock_queue);
|
KeAcquireInStackQueuedSpinLock(&device_conf->ref_lock, &lock_queue);
|
||||||
{
|
{
|
||||||
device_conf->ref = conf_ref;
|
FORT_CONF_FLAGS conf_flags;
|
||||||
|
|
||||||
if (old_conf_ref == NULL) {
|
device_conf->ref = conf_ref;
|
||||||
RtlZeroMemory(&old_conf_flags, sizeof(FORT_CONF_FLAGS));
|
|
||||||
old_conf_flags.prov_boot = fort_device_flag(device_conf, FORT_DEVICE_PROV_BOOT) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conf_ref != NULL) {
|
if (conf_ref != NULL) {
|
||||||
PFORT_CONF conf = &conf_ref->conf;
|
PFORT_CONF conf = &conf_ref->conf;
|
||||||
const PFORT_CONF_FLAGS conf_flags = &conf->flags;
|
|
||||||
|
|
||||||
fort_device_flag_set(device_conf, FORT_DEVICE_PROV_BOOT, conf_flags->prov_boot);
|
conf_flags = conf->flags;
|
||||||
|
fort_device_flag_set(device_conf, FORT_DEVICE_PROV_BOOT, conf_flags.prov_boot);
|
||||||
device_conf->conf_flags = *conf_flags;
|
|
||||||
} else {
|
} else {
|
||||||
RtlZeroMemory((void *) &device_conf->conf_flags, sizeof(FORT_CONF_FLAGS));
|
RtlZeroMemory((void *) &conf_flags, sizeof(FORT_CONF_FLAGS));
|
||||||
|
conf_flags.prov_boot = fort_device_flag(device_conf, FORT_DEVICE_PROV_BOOT) != 0;
|
||||||
device_conf->conf_flags.prov_boot =
|
|
||||||
fort_device_flag(device_conf, FORT_DEVICE_PROV_BOOT) != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device_conf->conf_flags = conf_flags;
|
||||||
}
|
}
|
||||||
KeReleaseInStackQueuedSpinLock(&lock_queue);
|
KeReleaseInStackQueuedSpinLock(&lock_queue);
|
||||||
|
|
||||||
if (old_conf_ref != NULL) {
|
if (old_conf_ref != NULL) {
|
||||||
old_conf_flags = old_conf_ref->conf.flags;
|
|
||||||
fort_conf_ref_put(device_conf, old_conf_ref);
|
fort_conf_ref_put(device_conf, old_conf_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -428,42 +445,29 @@ FORT_API FORT_CONF_FLAGS fort_conf_ref_flags_set(
|
|||||||
|
|
||||||
FORT_API BOOL fort_conf_ref_period_update(PFORT_DEVICE_CONF device_conf, BOOL force, int *periods_n)
|
FORT_API BOOL fort_conf_ref_period_update(PFORT_DEVICE_CONF device_conf, BOOL force, int *periods_n)
|
||||||
{
|
{
|
||||||
FORT_TIME time;
|
|
||||||
BOOL res = FALSE;
|
|
||||||
|
|
||||||
/* Get current time */
|
|
||||||
{
|
|
||||||
TIME_FIELDS tf;
|
|
||||||
LARGE_INTEGER system_time, local_time;
|
|
||||||
|
|
||||||
KeQuerySystemTime(&system_time);
|
|
||||||
ExSystemTimeToLocalTime(&system_time, &local_time);
|
|
||||||
RtlTimeToTimeFields(&local_time, &tf);
|
|
||||||
|
|
||||||
time.hour = (UCHAR) tf.Hour;
|
|
||||||
time.minute = (UCHAR) tf.Minute;
|
|
||||||
}
|
|
||||||
|
|
||||||
PFORT_CONF_REF conf_ref = fort_conf_ref_take(device_conf);
|
PFORT_CONF_REF conf_ref = fort_conf_ref_take(device_conf);
|
||||||
|
|
||||||
if (conf_ref != NULL) {
|
if (conf_ref == NULL)
|
||||||
PFORT_CONF conf = &conf_ref->conf;
|
return FALSE;
|
||||||
|
|
||||||
if (conf->app_periods_n != 0) {
|
BOOL res = FALSE;
|
||||||
const UINT16 period_bits = fort_conf_app_period_bits(conf, time, periods_n);
|
PFORT_CONF conf = &conf_ref->conf;
|
||||||
|
|
||||||
if (force || device_conf->conf_flags.group_bits != period_bits) {
|
if (conf->app_periods_n != 0) {
|
||||||
device_conf->conf_flags.group_bits = period_bits;
|
const FORT_TIME time = fort_current_time();
|
||||||
|
const UINT16 period_bits = fort_conf_app_period_bits(conf, time, periods_n);
|
||||||
|
|
||||||
fort_conf_app_perms_mask_init(conf, period_bits);
|
if (force || device_conf->conf_flags.group_bits != period_bits) {
|
||||||
|
device_conf->conf_flags.group_bits = period_bits;
|
||||||
|
|
||||||
res = TRUE;
|
fort_conf_app_perms_mask_init(conf, period_bits);
|
||||||
}
|
|
||||||
|
res = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
fort_conf_ref_put(device_conf, conf_ref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fort_conf_ref_put(device_conf, conf_ref);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -649,13 +649,14 @@ static NTSTATUS fort_callout_force_reauth(
|
|||||||
fort_prov_trans_begin(engine);
|
fort_prov_trans_begin(engine);
|
||||||
|
|
||||||
/* Check provider filters */
|
/* Check provider filters */
|
||||||
|
BOOL prov_recreated = FALSE;
|
||||||
if (old_conf_flags.prov_boot != conf_flags.prov_boot) {
|
if (old_conf_flags.prov_boot != conf_flags.prov_boot) {
|
||||||
fort_prov_unregister(engine);
|
fort_prov_unregister(engine);
|
||||||
|
|
||||||
if ((status = fort_prov_register(engine, conf_flags.prov_boot)))
|
if ((status = fort_prov_register(engine, conf_flags.prov_boot)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
goto stat_prov;
|
prov_recreated = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check flow filter */
|
/* Check flow filter */
|
||||||
@ -667,13 +668,12 @@ static NTSTATUS fort_callout_force_reauth(
|
|||||||
fort_device_flag(&g_device->conf, FORT_DEVICE_FILTER_TRANSPORT) != 0;
|
fort_device_flag(&g_device->conf, FORT_DEVICE_FILTER_TRANSPORT) != 0;
|
||||||
const BOOL filter_transport = (conf_flags.group_bits & filter_bits) != 0;
|
const BOOL filter_transport = (conf_flags.group_bits & filter_bits) != 0;
|
||||||
|
|
||||||
if (old_conf_flags.log_stat != conf_flags.log_stat
|
if (prov_recreated || old_conf_flags.log_stat != conf_flags.log_stat
|
||||||
|| old_filter_transport != filter_transport) {
|
|| old_filter_transport != filter_transport) {
|
||||||
fort_device_flag_set(&g_device->conf, FORT_DEVICE_FILTER_TRANSPORT, filter_transport);
|
fort_device_flag_set(&g_device->conf, FORT_DEVICE_FILTER_TRANSPORT, filter_transport);
|
||||||
|
|
||||||
fort_prov_flow_unregister(engine);
|
fort_prov_flow_unregister(engine);
|
||||||
|
|
||||||
stat_prov:
|
|
||||||
if (conf_flags.log_stat) {
|
if (conf_flags.log_stat) {
|
||||||
if ((status = fort_prov_flow_register(engine, filter_transport)))
|
if ((status = fort_prov_flow_register(engine, filter_transport)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
Loading…
Reference in New Issue
Block a user