C++ 创建 NdisProt 驱动程序的句柄
C++ Create a handle to a NdisProt driver
我尝试写入NdisProt驱动程序并发送原始以太网数据包。我将一些C++命令导入到我的 C# 程序中,以便可以访问驱动程序。当我尝试打开驱动程序的句柄时,我总是得到一个无效的句柄。我已经尝试过仅使用"NdisProt"作为路径,但没有解决它。你有什么建议为什么我得到一个无效的句柄吗?
private bool OpenDriver()
{
// User the CreateFile API to open a handle to the file
this.m_iHandle = CreateFile("\\.\NdisProt,
GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Check to see if we got a valid handle
if ((int)m_iHandle <= 0)
{
// If not, then return false and reset the handle to 0
this.m_iHandle = IntPtr.Zero;
return false;
}
如果您现在有任何其他解决方案可以在 C# 程序中发送原始以太网数据包,请告诉我。
感谢您的任何帮助!
更新:我刚刚通过添加另一个清单解决了问题,以便应用程序以管理员身份运行。
带有NDIS驱动程序的解决方案仍然不起作用,因此我搜索了另一种解决方案。我找到了SharpPcap库。使用该库,我可以修改要发送的数据包,例如更改目标 MAC 地址。
感谢您的回答!
如果您现在有任何其他解决方案可以在 C# 中发送原始以太网数据包 程序请让我知道。
套接字类呢?
构造 函数:
public Socket (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType),
其中socketType可以采用下一个值:SocketType.Raw
如果您现在有任何其他解决方案可以在 C# 程序中发送原始以太网数据包,请告诉我。
您可以从 Windows Winsock 库导入函数,并在创建套接字时使用SOCK_RAW标志。
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 使用mongocxx驱动程序时包含头文件问题
- void*到驱动程序中的UnicodeString
- C++驱动程序看不到头文件
- 从运行服务的应用程序代码中提取窗口句柄
- C++ 创建 NdisProt 驱动程序的句柄
- VCL 应用程序何时获取其应用程序>主窗体>句柄?
- 创建文件函数是否可以打开仅在WinObj实用程序中的全局目录下列出的设备的句柄?
- 如何在C++程序中打开一个新的cmd.exe并获取其句柄
- 编写 Windows 桌面应用程序时,我应该在哪里跟踪我的窗口句柄?
- MFC C++正在从WM_KEYDOWN处理程序获取在OnDraw()中编辑的CDC pDC的句柄
- 无效句柄(使用应用程序验证程序)
- 关闭提前退出的程序的文件句柄时的Linux 3.14策略
- C++如何获取泛型catch处理程序中抛出的异常的句柄
- 在QGraphicsScene上显示来自设备驱动程序的QWidget与本地窗口句柄(HWND)
- 获取应用程序运行实例的句柄
- 如何获得在windows中运行程序的窗口句柄
- Win32-获取应用程序的主Wnd句柄
- 跟踪WinSock MFC应用程序句柄泄漏的来源