ForUsb.cpp
上传用户:lyfy_2008
上传日期:2014-07-13
资源大小:3016k
文件大小:5k
源码类别:

USB编程

开发平台:

Visual C++

  1. // ForUsb.cpp
  2. //
  3. // Generated by DriverWizard version DriverStudio 2.7.0 (Build 562)
  4. // Requires Compuware's DriverWorks classes
  5. //
  6. #define VDW_MAIN
  7. #include <vdw.h>
  8. #include <kusb.h>
  9. #include "ForUsb.h"
  10. #include "ForUsbDevice.h"
  11. #pragma hdrstop("ForUsb.pch")
  12. // Generated by DriverWizard version DriverStudio 2.7.0 (Build 562)
  13. // Set a default 32-bit tag value to be stored with each heap block
  14. // allocated by operator new. Use BoundsChecker to view the memory pool.
  15. // This value can be overridden using the global function SetPoolTag().
  16. POOLTAG DefaultPoolTag('UroF');
  17. // Create the global driver trace object
  18. // TODO: Use KDebugOnlyTrace if you want trace messages
  19. // to appear only in debug builds.  Use KTrace if
  20. // you want trace messages to always appear.
  21. KTrace t("ForUsb");
  22. /////////////////////////////////////////////////////////////////////
  23. // Begin INIT section
  24. #pragma code_seg("INIT")
  25. DECLARE_DRIVER_CLASS(ForUsb, NULL)
  26. /////////////////////////////////////////////////////////////////////
  27. //  ForUsb::DriverEntry
  28. //
  29. // Routine Description:
  30. // This is the first entry point called by the system when the
  31. // driver is loaded.
  32. // 
  33. // Parameters:
  34. // RegistryPath - String used to find driver parameters in the
  35. // registry.  To locate ForUsb look for:
  36. // HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesForUsb
  37. //
  38. // Return Value:
  39. // NTSTATUS - Return STATUS_SUCCESS if no errors are encountered.
  40. // Any other indicates to the system that an error has occured.
  41. //
  42. // Comments:
  43. //
  44. NTSTATUS ForUsb::DriverEntry(PUNICODE_STRING RegistryPath)
  45. {
  46. t << "In DriverEntry Compiled at " __TIME__ " on " __DATE__ "n";
  47. // Open the "Parameters" key under the driver
  48. KRegistryKey Params(RegistryPath, L"Parameters");
  49. if ( NT_SUCCESS(Params.LastError()) )
  50. {
  51. #if DBG
  52. ULONG bBreakOnEntry = FALSE;
  53. // Read "BreakOnEntry" value from registry
  54. Params.QueryValue(L"BreakOnEntry", &bBreakOnEntry);
  55. // If requested, break into debugger
  56. if (bBreakOnEntry) DbgBreakPoint();
  57. #endif
  58. // Load driver data members from the registry
  59. LoadRegistryParameters(Params);
  60. }
  61. m_Unit = 0;
  62. return STATUS_SUCCESS;
  63. }
  64. /////////////////////////////////////////////////////////////////////
  65. //  ForUsb::LoadRegistryParameters
  66. //
  67. // Routine Description:
  68. // Load driver data members from the registry.
  69. // 
  70. // Parameters:
  71. // Params - Open registry key pointing to "Parameters"
  72. //
  73. // Return Value:
  74. // None
  75. //
  76. // Comments:
  77. // Member variables are updated with values read from registry.
  78. //
  79. // The parameters are found as values under the "Parameters" key,
  80. // HKLMSYSTEMCurrentControlSetServicesForUsbParameters...
  81. //
  82. void ForUsb::LoadRegistryParameters(KRegistryKey &Params)
  83. {
  84. m_bBreakOnEntry = FALSE;
  85. Params.QueryValue(L"BreakOnEntry", &m_bBreakOnEntry);
  86. t << "m_bBreakOnEntry loaded from registry, resulting value: [" << m_bBreakOnEntry << "]n";
  87. }
  88. // End INIT section
  89. /////////////////////////////////////////////////////////////////////
  90. #pragma code_seg()
  91. /////////////////////////////////////////////////////////////////////
  92. //  ForUsb::AddDevice
  93. //
  94. // Routine Description:
  95. // Called when the system detects a device for which this
  96. // driver is responsible.
  97. //
  98. // Parameters:
  99. // Pdo - Physical Device Object. This is a pointer to a system device
  100. // object that represents the physical device.
  101. //
  102. // Return Value:
  103. // NTSTATUS - Success or failure code.
  104. //
  105. // Comments:
  106. // This function creates the Functional Device Object, or FDO. The FDO
  107. // enables this driver to handle requests for the physical device. 
  108. //
  109. NTSTATUS ForUsb::AddDevice(PDEVICE_OBJECT Pdo)
  110. {
  111. t << "AddDevice calledn";
  112.     // Create the device object. Note that we used a form of "placement" new,
  113. // that is a member operator of KDevice.  This form will use storage
  114. // allocated by the system in the device object's device to store our
  115. // class instance.
  116. ForUsbDevice * pDevice = new (
  117. static_cast<PCWSTR>(KUnitizedName(L"ForUsbDevice", m_Unit)),
  118. FILE_DEVICE_UNKNOWN,
  119. NULL,
  120. 0,
  121. DO_BUFFERED_IO
  122. | DO_POWER_PAGABLE
  123. )
  124. ForUsbDevice(Pdo, m_Unit);
  125. if (pDevice == NULL)
  126. {
  127. t << "Error creating device ForUsbDevice"
  128.    << (ULONG) m_Unit << EOL;
  129.     return STATUS_INSUFFICIENT_RESOURCES;
  130. }
  131. NTSTATUS status = pDevice->ConstructorStatus();
  132. if ( !NT_SUCCESS(status) )
  133. {
  134. t << "Error constructing device ForUsbDevice"
  135.   << (ULONG) m_Unit << " status " << (ULONG) status << EOL;
  136. delete pDevice;
  137. }
  138. else
  139. {
  140. m_Unit++;
  141. pDevice->ReportNewDevicePowerState(PowerDeviceD0);
  142. }
  143. return status;
  144. }