Skip to content

Commit

Permalink
packetbeat/npcap: unload DLL during install operation
Browse files Browse the repository at this point in the history
  • Loading branch information
efd6 committed Feb 21, 2022
1 parent 378dab5 commit 04a5d0d
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
14 changes: 13 additions & 1 deletion packetbeat/npcap/npcap.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,18 @@ func Install(ctx context.Context, log *logp.Logger, path, dst string, compat boo
}

func install(ctx context.Context, log *logp.Logger, path, dst string, compat bool) error {
if pcap.Version() != "" {
// If we are here there is a runtime Npcap DLL loaded. We need to
// unload this to prevent the application being killed during the
// install.
//
// See https://npcap.com/guide/npcap-users-guide.html#npcap-installation-uninstall-options.
err := unloadWinPCAP()
if err != nil {
return fmt.Errorf("npcap: failed to unload Npcap DLL: %w", err)
}
}

args := []string{"/S", "/winpcap_mode=no"}
if compat {
args[1] = "/winpcap_mode=yes"
Expand Down Expand Up @@ -96,7 +108,7 @@ func install(ctx context.Context, log *logp.Logger, path, dst string, compat boo
return fmt.Errorf("npcap: failed to install Npcap: %w", err)
}

return reloadWinPCAP()
return loadWinPCAP()
}

func Upgradeable() bool {
Expand Down
2 changes: 1 addition & 1 deletion packetbeat/npcap/npcap_other.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ package npcap

func loadWinPCAP() error { return nil }

func reloadWinPCAP() error { return nil }
func unloadWinPCAP() error { return nil }
8 changes: 1 addition & 7 deletions packetbeat/npcap/npcap_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,4 @@ import "github.com/google/gopacket/pcap"

func loadWinPCAP() error { return pcap.LoadWinPCAP() }

func reloadWinPCAP() error {
err := pcap.UnloadWinPCAP()
if err != nil {
return err
}
return pcap.LoadWinPCAP()
}
func unloadWinPCAP() error { return pcap.UnloadWinPCAP() }

0 comments on commit 04a5d0d

Please sign in to comment.