Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.5 KiB

  1. /*++
  2. Copyright (c) 1990 Microsoft Corporation
  3. Module Name:
  4. fspdisp.h
  5. Abstract:
  6. This module defines the data structures and routines used for the FSP
  7. dispatching code.
  8. Author:
  9. Larry Osterman (LarryO) 13-Aug-1990
  10. Revision History:
  11. 13-Aug-1990 LarryO
  12. Created
  13. --*/
  14. #ifndef _FSPDISP_
  15. #define _FSPDISP_
  16. //
  17. // Define communications data area between FSD and FSP. This is done through
  18. // the use of a Device Object. This model allows one device object to be
  19. // created for each volume that is/has been mounted in the system. That is,
  20. // each time a volume is mounted, the file system creates a device object to
  21. // represent it so that the I/O system can vector directly to the proper file
  22. // system. The file system then uses information in the device object and in
  23. // the file object to locate and synchronize access to its database of open
  24. // file data structures (often called File Control Blocks - or, FCBs), Volume
  25. // Control Blocks (VCBs), Map Control Blocks (MCBs), etc.
  26. //
  27. // The event and spinlock will be used to control access to the queue of IRPs.
  28. // The IRPs are passed from the FSD to the FSP by inserting them onto the work
  29. // queue in an interlocked manner and then setting the event to the Signaled
  30. // state. The event is an autoclearing type so the FSP simply wakes up when
  31. // the event is Signaled and begins processing entries in the queue.
  32. //
  33. // Other data in this record should contain any information which both the FSD
  34. // and the FSP need to share. For example, a list of all of the open files
  35. // might be something that both should be able to see. Notice that all data
  36. // placed in this area must be allocated from paged or non-paged pool.
  37. //
  38. typedef struct _BOWSER_FS_DEVICE_OBJECT {
  39. DEVICE_OBJECT DeviceObject;
  40. } BOWSER_FS_DEVICE_OBJECT, *PBOWSER_FS_DEVICE_OBJECT;
  41. NTSTATUS
  42. BowserpInitializeFsp(
  43. PDRIVER_OBJECT BowserDriverObject
  44. );
  45. VOID
  46. BowserpUninitializeFsp (
  47. VOID
  48. );
  49. VOID
  50. BowserWorkerDispatch (
  51. PVOID Context
  52. );
  53. NTSTATUS
  54. BowserFsdPostToFsp(
  55. IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
  56. IN PIRP Irp
  57. );
  58. NTSTATUS
  59. BowserFspQueryInformationFile (
  60. IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
  61. IN PIRP Irp
  62. );
  63. NTSTATUS
  64. BowserFspQueryVolumeInformationFile (
  65. IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
  66. IN PIRP Irp
  67. );
  68. NTSTATUS
  69. BowserFspDeviceIoControlFile (
  70. IN PBOWSER_FS_DEVICE_OBJECT DeviceObject,
  71. IN PIRP Irp
  72. );
  73. VOID
  74. BowserIdleTimer (
  75. IN PDEVICE_OBJECT DeviceObject,
  76. IN PVOID Context
  77. );
  78. #endif // _FSPDISP_