97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync/* $Id$ */
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync/** @file
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * VBox USB Monitor
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync */
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync/*
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * Copyright (C) 2011 Oracle Corporation
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync *
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * available from http://www.virtualbox.org. This file is free software;
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * you can redistribute it and/or modify it under the terms of the GNU
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * General Public License (GPL) as published by the Free Software
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync */
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#ifndef ___VBoxUsbMon_h___
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#define ___VBoxUsbMon_h___
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include <VBox/cdefs.h>
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include <VBox/types.h>
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include <iprt/assert.h>
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include <VBox/sup.h>
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include <iprt/asm.h>
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include <VBox/log.h>
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync#ifdef DEBUG
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync/* disables filters */
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync//#define VBOXUSBMON_DBG_NO_FILTERS
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync/* disables pnp hooking */
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync//#define VBOXUSBMON_DBG_NO_PNPHOOK
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync#endif
6cb6e43f3a668826e9b9d00102f7dee1299589e7vboxsync
67bfa93839cac50828c90f19a00256bf44cc0f33vboxsync#include "../../../win/VBoxDbgLog.h"
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include "../cmn/VBoxDrvTool.h"
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include "../cmn/VBoxUsbTool.h"
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include "VBoxUsbHook.h"
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#include "VBoxUsbFlt.h"
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsyncPVOID VBoxUsbMonMemAlloc(SIZE_T cbBytes);
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsyncPVOID VBoxUsbMonMemAllocZ(SIZE_T cbBytes);
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsyncVOID VBoxUsbMonMemFree(PVOID pvMem);
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsyncNTSTATUS VBoxUsbMonGetDescriptor(PDEVICE_OBJECT pDevObj, void *buffer, int size, int type, int index, int language_id);
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsyncNTSTATUS VBoxUsbMonQueryBusRelations(PDEVICE_OBJECT pDevObj, PFILE_OBJECT pFileObj, PDEVICE_RELATIONS *pDevRelations);
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsyncvoid vboxUsbDbgPrintUnicodeString(PUNICODE_STRING pUnicodeString);
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync/* visit usbhub-originated device PDOs */
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync#define VBOXUSBMONHUBWALK_F_PDO 0x00000001
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync/* visit usbhub device FDOs */
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync#define VBOXUSBMONHUBWALK_F_FDO 0x00000002
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync/* visit all usbhub-originated device objects */
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync#define VBOXUSBMONHUBWALK_F_ALL (VBOXUSBMONHUBWALK_F_FDO | VBOXUSBMONHUBWALK_F_PDO)
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsynctypedef DECLCALLBACK(BOOLEAN) FNVBOXUSBMONDEVWALKER(PFILE_OBJECT pFile, PDEVICE_OBJECT pTopDo, PDEVICE_OBJECT pHubDo, PVOID pvContext);
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsynctypedef FNVBOXUSBMONDEVWALKER *PFNVBOXUSBMONDEVWALKER;
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsyncVOID vboxUsbMonHubDevWalk(PFNVBOXUSBMONDEVWALKER pfnWalker, PVOID pvWalker, ULONG fFlags);
ef357854a9842b56c249eea7ebf2f66e7c9da7c1vboxsync
97b634ea021fd984782256de4ba4ff31cdb96c47vboxsync#endif /* #ifndef ___VBoxUsbMon_h___ */