Open invokes WinDivertOpen. Returns a handle or an error.
(filter string, layer uint32, priority int16, flags uint64)
| 95 | |
| 96 | // Open invokes WinDivertOpen. Returns a handle or an error. |
| 97 | func Open(filter string, layer uint32, priority int16, flags uint64) (handleRaw, error) { |
| 98 | if err := dll.Load(); err != nil { |
| 99 | return invalidHandle, fmt.Errorf("snix/windows: WinDivert.dll not loadable: %w (install WinDivert and ensure the DLL is on PATH or next to snix.exe)", err) |
| 100 | } |
| 101 | fptr, err := windows.BytePtrFromString(filter) |
| 102 | if err != nil { |
| 103 | return invalidHandle, err |
| 104 | } |
| 105 | r1, _, e1 := procWinDivertOpen.Call( |
| 106 | uintptr(unsafe.Pointer(fptr)), |
| 107 | uintptr(layer), |
| 108 | uintptr(uint16(priority)), |
| 109 | uintptr(flags), |
| 110 | ) |
| 111 | h := handleRaw(r1) |
| 112 | if h == invalidHandle { |
| 113 | return invalidHandle, fmt.Errorf("WinDivertOpen: %w", translateErr(e1)) |
| 114 | } |
| 115 | return h, nil |
| 116 | } |
| 117 | |
| 118 | // Recv fetches the next packet into buf. Returns the number of bytes and |
| 119 | // the address metadata. On error, n is undefined. |
no test coverage detected