コード例 #1
0
ファイル: hook.c プロジェクト: MartinDrab/IRPMon
NTSTATUS UnhookDriverObject(PDRIVER_HOOK_RECORD DriverRecord)
{
	KIRQL irql;
	PHASH_ITEM h = NULL;
	NTSTATUS status = STATUS_UNSUCCESSFUL;
	DEBUG_ENTER_FUNCTION("DriverRecord=0x%p", DriverRecord);

	KeAcquireSpinLock(&_driverTableLock, &irql);
	h = HashTableDelete(_driverTable, DriverRecord->DriverObject);
	if (h != NULL) {
		KeReleaseSpinLock(&_driverTableLock, irql);
		if (DriverRecord->MonitoringEnabled) {
			_UnhookDriverObject(DriverRecord);
			DriverRecord->MonitoringEnabled = FALSE;
		}
		
		KeAcquireSpinLock(&DriverRecord->SelectedDevicesLock, &irql);
		HashTableClear(DriverRecord->SelectedDevices, TRUE);
		KeReleaseSpinLock(&DriverRecord->SelectedDevicesLock, irql);
		_InvalidateDriverHookRecord(DriverRecord);
		DriverHookRecordDereference(DriverRecord);
		status = STATUS_SUCCESS;
	} else {
		KeReleaseSpinLock(&_driverTableLock, irql);
		status = STATUS_NOT_FOUND;
		ASSERT(FALSE);
	}

	DEBUG_EXIT_FUNCTION("0x%x", status);
	return status;
}
コード例 #2
0
HashTable* HashTableCreate ( int _initialSize )
{
    HashTable * pNewHT = new HashTable;
        
    pNewHT->m_tableSize = _initialSize;
    pNewHT->m_pData     = new HashTable::Element[ pNewHT->m_tableSize ];

    HashTableClear( * pNewHT );

    return pNewHT;
}
コード例 #3
0
ファイル: handle-table.c プロジェクト: MartinDrab/IRPMon
VOID HandleTableClear(PCHANDLE_TABLE HandleTable)
{
	KIRQL irql;
	DEBUG_ENTER_FUNCTION("Handletable=0x%p", HandleTable);

	_HandleTableLockExclusive(HandleTable, &irql);
	HashTableClear(HandleTable->HashTable, TRUE);
	_HandleTableUnlock(HandleTable, irql);

	DEBUG_EXIT_FUNCTION_VOID();
	return;
}
コード例 #4
0
ファイル: hook.c プロジェクト: MartinDrab/IRPMon
static VOID _DriverFreeFunction(PHASH_ITEM HashItem)
{
	PDRIVER_HOOK_RECORD r = CONTAINING_RECORD(HashItem, DRIVER_HOOK_RECORD, HashItem);
	DEBUG_ENTER_FUNCTION("HashItem=0x%p", HashItem);

	if (r->MonitoringEnabled) {
		_UnhookDriverObject(r);
		r->MonitoringEnabled = FALSE;
	}

	HashTableClear(r->SelectedDevices, TRUE);
	DriverHookRecordDereference(r);

	DEBUG_EXIT_FUNCTION_VOID();
	return;
}
コード例 #5
0
ファイル: configuration.c プロジェクト: ikeboy/mgba
bool ConfigurationRead(struct Configuration* configuration, const char* path) {
	HashTableClear(&configuration->root);
	HashTableClear(&configuration->sections);
	return ini_parse(path, _iniRead, configuration) == 0;
}
コード例 #6
0
ファイル: configuration.c プロジェクト: OpenEmu/mGBA-Core
bool ConfigurationReadVFile(struct Configuration* configuration, struct VFile* vf) {
	HashTableClear(&configuration->root);
	HashTableClear(&configuration->sections);
	return ini_parse_stream(_vfgets, vf, _iniRead, configuration) == 0;
}