Skip to content

Commit fb384ca

Browse files
committed
Added support for querying the interface list based on the search binding.
1 parent 0c40679 commit fb384ca

1 file changed

Lines changed: 25 additions & 12 deletions

File tree

NtObjectManager/NtObjectManager.psm1

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4560,51 +4560,64 @@ function Get-RpcEndpoint {
45604560
Param(
45614561
[parameter(Mandatory, Position = 0, ParameterSetName = "FromId")]
45624562
[parameter(Mandatory, Position = 0, ParameterSetName = "FromIdAndVersion")]
4563-
[string]$InterfaceId,
4563+
[Guid]$InterfaceId,
45644564
[parameter(Mandatory, Position = 1, ParameterSetName = "FromIdAndVersion")]
45654565
[Version]$InterfaceVersion,
4566-
[parameter(Mandatory, Position = 0, ParameterSetName = "FromServer", ValueFromPipeline)]
4566+
[parameter(Mandatory, ParameterSetName = "FromServer", ValueFromPipeline)]
45674567
[NtApiDotNet.Ndr.NdrRpcServerInterface]$Server,
45684568
[parameter(Mandatory, ParameterSetName = "FromBinding")]
45694569
[string]$Binding,
45704570
[parameter(Mandatory, ParameterSetName = "FromAlpc")]
45714571
[string]$AlpcPort,
45724572
[parameter(ParameterSetName = "FromIdAndVersion")]
45734573
[parameter(ParameterSetName = "FromServer")]
4574-
[switch]$FindAlpcPort
4574+
[switch]$FindAlpcPort,
4575+
[parameter(ParameterSetName = "All")]
4576+
[parameter(ParameterSetName = "FromId")]
4577+
[parameter(ParameterSetName = "FromIdAndVersion")]
4578+
[string]$SearchBinding = "",
4579+
[parameter(ParameterSetName = "All")]
4580+
[parameter(ParameterSetName = "FromId")]
4581+
[parameter(ParameterSetName = "FromIdAndVersion")]
4582+
[string[]]$ProtocolSequence = @()
45754583
)
45764584

45774585
PROCESS {
4578-
switch ($PsCmdlet.ParameterSetName) {
4586+
$eps = switch ($PsCmdlet.ParameterSetName) {
45794587
"All" {
4580-
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints() | Write-Output
4588+
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($SearchBinding)
45814589
}
45824590
"FromId" {
4583-
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($InterfaceId) | Write-Output
4591+
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($SearchBinding, $InterfaceId)
45844592
}
45854593
"FromIdAndVersion" {
45864594
if ($FindAlpcPort) {
4587-
[NtApiDotNet.Win32.RpcEndpointMapper]::FindAlpcEndpointForInterface($InterfaceId, $InterfaceVersion) | Write-Output
4595+
[NtApiDotNet.Win32.RpcEndpointMapper]::FindAlpcEndpointForInterface($InterfaceId, $InterfaceVersion)
45884596
}
45894597
else {
4590-
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($InterfaceId, $InterfaceVersion) | Write-Output
4598+
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($SearchBinding, $InterfaceId, $InterfaceVersion)
45914599
}
45924600
}
45934601
"FromServer" {
45944602
if ($FindAlpcPort) {
4595-
[NtApiDotNet.Win32.RpcEndpointMapper]::FindAlpcEndpointForInterface($Server.InterfaceId, $Server.InterfaceVersion) | Write-Output
4603+
[NtApiDotNet.Win32.RpcEndpointMapper]::FindAlpcEndpointForInterface($Server.InterfaceId, $Server.InterfaceVersion)
45964604
}
45974605
else {
4598-
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($Server) | Write-Output
4606+
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpoints($Server)
45994607
}
46004608
}
46014609
"FromBinding" {
4602-
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpointsForBinding($Binding) | Write-Output
4610+
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpointsForBinding($Binding)
46034611
}
46044612
"FromAlpc" {
4605-
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpointsForAlpcPort($AlpcPort) | Write-Output
4613+
[NtApiDotNet.Win32.RpcEndpointMapper]::QueryEndpointsForAlpcPort($AlpcPort)
46064614
}
46074615
}
4616+
4617+
if ($ProtocolSequence.Count -gt 0) {
4618+
$eps = $eps | Where-Object {$_.ProtocolSequence -in $ProtocolSequence}
4619+
}
4620+
$eps | Write-Output
46084621
}
46094622
}
46104623

0 commit comments

Comments
 (0)