/* Editor Settings: expandtabs and use 4 spaces for indentation * ex: set softtabstop=4 tabstop=8 expandtab shiftwidth=4: * * -*- mode: c, c-basic-offset: 4 -*- */ /* * Copyright Likewise Software * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. You should have received a copy of the GNU General * Public License along with this program. If not, see * . * * LIKEWISE SOFTWARE MAKES THIS SOFTWARE AVAILABLE UNDER OTHER LICENSING * TERMS AS WELL. IF YOU HAVE ENTERED INTO A SEPARATE LICENSE AGREEMENT * WITH LIKEWISE SOFTWARE, THEN YOU MAY ELECT TO USE THE SOFTWARE UNDER THE * TERMS OF THAT SOFTWARE LICENSE AGREEMENT INSTEAD OF THE TERMS OF THE GNU * GENERAL PUBLIC LICENSE, NOTWITHSTANDING THE ABOVE NOTICE. IF YOU * HAVE QUESTIONS, OR WISH TO REQUEST A COPY OF THE ALTERNATE LICENSING * TERMS OFFERED BY LIKEWISE SOFTWARE, PLEASE CONTACT LIKEWISE SOFTWARE AT * license@likewisesoftware.com */ /* * Copyright (C) Likewise Software. All rights reserved. * * Module Name: * * includes.h * * Abstract: * * IO Test Driver * * Internal Includes * * Authors: Danilo Almeida (dalmeida@likewisesoftware.com) */ #ifndef __INCLUDES_H__ #define __INCLUDES_H__ #include "config.h" #include "lwiosys.h" #include #include #include "iodriver.h" #include "ntlogmacros.h" #include "lwioutils.h" #include "workqueue.h" #define IOTEST_DEVICE_NAME "iotest" #define IOTEST_DEVICE_PATH "/" IOTEST_DEVICE_NAME #define IOTEST_INTERNAL_PATH_NAMED_PIPE "/pipe" #define IOTEST_INTERNAL_PATH_ALLOW "/allow" #define IOTEST_INTERNAL_PATH_ASYNC "/async" #define IOTEST_INTERNAL_PATH_TEST_SYNC "/test/sync" #define IOTEST_INTERNAL_PATH_TEST_ASYNC "/test/async" #define IOTEST_PATH_ALLOW IOTEST_DEVICE_PATH IOTEST_INTERNAL_PATH_ALLOW #define IOTEST_PATH_ASYNC IOTEST_DEVICE_PATH IOTEST_INTERNAL_PATH_ASYNC #include // // Driver State // typedef struct _IT_DRIVER_STATE { PIOTEST_WORK_QUEUE pWorkQueue; } IT_DRIVER_STATE, *PIT_DRIVER_STATE; PIT_DRIVER_STATE ItGetDriverState( IN PIRP pIrp ); // // IRP Context // struct _IT_IRP_CONTEXT; typedef struct _IT_IRP_CONTEXT IT_IRP_CONTEXT, *PIT_IRP_CONTEXT; typedef VOID (*IT_CONTINUE_CALLBACK)( IN PIT_IRP_CONTEXT pIrpContext ); struct _IT_IRP_CONTEXT { PIRP pIrp; PIOTEST_WORK_ITEM pWorkItem; BOOLEAN IsCancelled; IT_CONTINUE_CALLBACK ContinueCallback; PVOID ContinueContext; }; NTSTATUS ItCreateIrpContext( OUT PIT_IRP_CONTEXT* ppIrpContext, IN PIRP pIrp ); VOID ItDestroyIrpContext( IN OUT PIT_IRP_CONTEXT* ppIrpContext ); // // Async Helper // NTSTATUS ItDispatchAsync( IN PIRP pIrp, IN ULONG WaitSeconds, IN IT_CONTINUE_CALLBACK ContinueCallback, IN PVOID ContinueContext ); VOID ItAsyncCompleteSetEvent( IN PVOID pCallbackContext ); VOID ItSimpleSuccessContinueCallback( IN PIT_IRP_CONTEXT pIrpContext ); // // Create Control Block (CCB) // typedef struct _IT_CCB { UNICODE_STRING Path; BOOLEAN IsNamedPipe; } IT_CCB, *PIT_CCB; NTSTATUS ItpCreateCcb( OUT PIT_CCB* ppCcb, IN PUNICODE_STRING pPath ); VOID ItpDestroyCcb( IN OUT PIT_CCB* ppCcb ); NTSTATUS ItpGetCcb( OUT PIT_CCB* ppCcb, IN PIRP pIrp ); // // Dispatch Routines // NTSTATUS ItDispatchCreate( IN PIRP pIrp ); NTSTATUS ItDispatchClose( IN PIRP pIrp ); NTSTATUS ItDispatchRead( IN PIRP pIrp ); NTSTATUS ItDispatchWrite( IN PIRP pIrp ); NTSTATUS ItDispatchDeviceIoControl( IN PIRP pIrp ); NTSTATUS ItDispatchFsControl( IN PIRP pIrp ); NTSTATUS ItDispatchFlushBuffers( IN PIRP pIrp ); NTSTATUS ItDispatchQueryInformation( IN PIRP pIrp ); NTSTATUS ItDispatchSetInformation( IN PIRP pIrp ); NTSTATUS ItDispatchCreateNamedPipe( IN PIRP pIrp ); // // Tests // NTSTATUS ItTestStartup( IN PCSTR pszPath ); NTSTATUS ItTestSyncCreate( VOID ); NTSTATUS ItTestAsyncCreate( IN BOOLEAN UseAsyncCall, IN BOOLEAN DoCancel ); NTSTATUS ItTestRundown( VOID ); NTSTATUS ItTestSleep( IN PIRP pIrp, IN ULONG Seconds ); #endif /* __INCLUDES_H__ */