MCPcopy Index your code
hub / github.com/microsoft/go-winio

github.com/microsoft/go-winio @v0.6.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.6.2 ↗ · + Follow
786 symbols 2,404 edges 97 files 392 documented · 50% 412 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

go-winio Build Status

This repository contains utilities for efficiently performing Win32 IO operations in Go. Currently, this is focused on accessing named pipes and other file handles, and for using named pipes as a net transport.

This code relies on IO completion ports to avoid blocking IO on system threads, allowing Go to reuse the thread to schedule another goroutine. This limits support to Windows Vista and newer operating systems. This is similar to the implementation of network sockets in Go's net package.

Please see the LICENSE file for licensing information.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit Microsoft CLA.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

Additionally, the pull request pipeline requires the following steps to be performed before mergining.

Code Sign-Off

We require that contributors sign their commits using git commit --signoff to certify they either authored the work themselves or otherwise have permission to use it in this project.

A range of commits can be signed off using git rebase --signoff.

Please see the developer certificate for more info, as well as to make sure that you can attest to the rules listed. Our CI uses the DCO Github app to ensure that all commits in a given PR are signed-off.

Linting

Code must pass a linting stage, which uses golangci-lint. The linting settings are stored in .golangci.yaml, and can be run automatically with VSCode by adding the following to your workspace or folder settings:

    "go.lintTool": "golangci-lint",
    "go.lintOnSave": "package",

Additional editor integrations options are also available.

Alternatively, golangci-lint can be installed locally and run from the repo root:

# use . or specify a path to only lint a package
# to show all lint errors, use flags "--max-issues-per-linter=0 --max-same-issues=0"
> golangci-lint run ./...

Go Generate

The pipeline checks that auto-generated code, via go generate, are up to date.

This can be done for the entire repo:

> go generate ./...

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Special Thanks

Thanks to natefinch for the inspiration for this library. See npipe for another named pipe implementation.

Extension points exported contracts — how you extend this code

RawSockaddr (Interface)
RawSockaddr allows structs to be used with [Bind] and [ConnectEx]. The struct must meet the Win32 sockaddr requirements [1 …
internal/socket/rawaddr.go
CloseWriter (Interface)
(no doc) [2 implementers]
pipe_test.go
PipeConn (Interface)
sys connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) = ConnectNamedPipe sys createNamedPipe(name
pipe.go
Reader (Interface)
Reader is an interface used by the decompressor to access the input stream. If the provided io.Reader does not implement
wim/lzx/lzx.go
HookOpt (FuncType)
HookOpt is an option to change the behavior of the Logrus ETW hook.
pkg/etwlogrus/hook.go
EnableCallback (FuncType)
EnableCallback is the form of the callback function that receives provider enable/disable notifications from ETW.
pkg/etw/provider.go
ProviderOpt (FuncType)
ProviderOpt allows the caller to specify provider options to NewProviderWithOptions.
pkg/etw/provider.go
EventOpt (FuncType)
EventOpt defines the option function type that can be passed to Provider.WriteEvent to specify general event options, su
pkg/etw/eventopt.go

Core symbols most depended-on inside this repo

Pointer
called by 153
internal/stringbuffer/wstring.go
Close
called by 88
file.go
Addr
called by 57
hvsock.go
Write
called by 54
file.go
Read
called by 26
file.go
errnoErr
called by 23
zsyscall_windows.go
writeUint16
called by 17
pkg/etw/eventdata.go
ListenPipe
called by 16
pipe.go

Shape

Function 408
Method 224
Struct 104
TypeAlias 40
FuncType 5
Interface 5

Languages

Go100%

Modules by API surface

tools/mkwinsyscall/mkwinsyscall.go58 symbols
wim/wim.go48 symbols
hvsock.go43 symbols
pipe.go39 symbols
pkg/etw/fieldopt.go36 symbols
zsyscall_windows.go34 symbols
pipe_test.go28 symbols
file.go26 symbols
hvsock_test.go25 symbols
vhd/vhd.go24 symbols
pkg/guid/guid_test.go22 symbols
pkg/etw/provider.go21 symbols

For agents

$ claude mcp add go-winio \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact