Source file src/internal/runtime/syscall/windows/syscall_windows.go

     1  // Copyright 2025 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package windows provides the syscall primitives required for the runtime.
     6  
     7  package windows
     8  
     9  import (
    10  	"internal/abi"
    11  )
    12  
    13  // MaxArgs should be divisible by 2, as Windows stack
    14  // must be kept 16-byte aligned on syscall entry.
    15  //
    16  // Although it only permits maximum 42 parameters, it
    17  // is arguably large enough.
    18  const MaxArgs = 42
    19  
    20  // StdCallInfo is a structure used to pass parameters to the system call.
    21  type StdCallInfo struct {
    22  	Fn   uintptr
    23  	N    uintptr // number of parameters
    24  	Args uintptr // parameters
    25  	R1   uintptr // return values
    26  	R2   uintptr
    27  	Err  uintptr // error number
    28  }
    29  
    30  // StdCall calls a function using Windows' stdcall convention.
    31  //
    32  //go:noescape
    33  func StdCall(fn *StdCallInfo)
    34  
    35  // asmstdcall is the function pointer for [AsmStdCallAddr].
    36  func asmstdcall(fn *StdCallInfo)
    37  
    38  // AsmStdCallAddr is the address of a function that accepts a pointer
    39  // to [StdCallInfo] stored on the stack following the C calling convention,
    40  // and calls the function using Windows' stdcall calling convention.
    41  // Shouldn't be called directly from Go.
    42  func AsmStdCallAddr() uintptr {
    43  	return abi.FuncPCABI0(asmstdcall)
    44  }
    45  

View as plain text