如何在 UEFI 应用程序中使用 ArpDxe 驱动程序
How to utilize ArpDxe driver in UEFI application
我正在尝试在 UEFI 应用程序中使用 ArpDxe 驱动程序获取 ARP table。这是我的代码:
EFI_ARP_PROTOCOL* Arp;
EFI_STATUS Status;
UINT32 Count;
UINT32 Length;
EFI_ARP_FIND_DATA* Entries;
Status = gBS->LocateProtocol (
&gEfiArpProtocolGuid,
NULL,
(VOID**)&Arp
);
if (Status == EFI_SUCCESS) {
Status = Arp->Find(Arp, true, NULL, &Length, &Count, &Entries, false);
if (Status == EFI_SUCCESS) {
//......
}
}
问题是,ARP 查找功能总是 returns EFI_NOT_FOUND。
我尝试在 运行 我的应用程序之前 ping 一个有效的 IP,尝试在调用 find 函数之前调用 ARP 请求函数,甚至尝试调用 ARP add 函数来添加一个虚拟数据,但是 none 它们导致可以找到一些东西。有人可以指出我做错了什么吗?
与大多数网络协议一样,ARP 使用服务绑定协议来创建新实例。
你必须:
找到服务绑定协议
EFI_HANDLE ChildHandle = NULL;
EFI_SERVICE_BINDING_PROTOCOL* ArpSb;
gBS->LocateProtocol(&gEfiArpServiceBindingProtocolGuid,NULL,(VOID**)&ArpSb)
创建一个新的 ARP 实例
ArpSb->CreateChild(ArpSb, &ChildHandle)
处理EFI_ARP_PROTOCOL
gBS->HandleProtocol(ChildHandle, &gEfiArpProtocolGuid, (VOID**)&Arp)
配置新实例
Arp->Configure(Arp,...)
完成后销毁实例
ArpSb->DestroyChild(ArpSb, ChildHandle)
当您直接搜索 proctocol(不创建新实例)时,您会得到一个属于某些配置未知的驱动程序或应用程序的实例。
我正在尝试在 UEFI 应用程序中使用 ArpDxe 驱动程序获取 ARP table。这是我的代码:
EFI_ARP_PROTOCOL* Arp;
EFI_STATUS Status;
UINT32 Count;
UINT32 Length;
EFI_ARP_FIND_DATA* Entries;
Status = gBS->LocateProtocol (
&gEfiArpProtocolGuid,
NULL,
(VOID**)&Arp
);
if (Status == EFI_SUCCESS) {
Status = Arp->Find(Arp, true, NULL, &Length, &Count, &Entries, false);
if (Status == EFI_SUCCESS) {
//......
}
}
问题是,ARP 查找功能总是 returns EFI_NOT_FOUND。 我尝试在 运行 我的应用程序之前 ping 一个有效的 IP,尝试在调用 find 函数之前调用 ARP 请求函数,甚至尝试调用 ARP add 函数来添加一个虚拟数据,但是 none 它们导致可以找到一些东西。有人可以指出我做错了什么吗?
与大多数网络协议一样,ARP 使用服务绑定协议来创建新实例。
你必须:
找到服务绑定协议
EFI_HANDLE ChildHandle = NULL; EFI_SERVICE_BINDING_PROTOCOL* ArpSb; gBS->LocateProtocol(&gEfiArpServiceBindingProtocolGuid,NULL,(VOID**)&ArpSb)
创建一个新的 ARP 实例
ArpSb->CreateChild(ArpSb, &ChildHandle)
处理EFI_ARP_PROTOCOL
gBS->HandleProtocol(ChildHandle, &gEfiArpProtocolGuid, (VOID**)&Arp)
配置新实例
Arp->Configure(Arp,...)
完成后销毁实例
ArpSb->DestroyChild(ArpSb, ChildHandle)
当您直接搜索 proctocol(不创建新实例)时,您会得到一个属于某些配置未知的驱动程序或应用程序的实例。