Source file src/internal/syscall/windows/string_windows.go

     1  // Copyright 2024 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
     6  
     7  import "syscall"
     8  
     9  // NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.
    10  type NTUnicodeString struct {
    11  	Length        uint16
    12  	MaximumLength uint16
    13  	Buffer        *uint16
    14  }
    15  
    16  // NewNTUnicodeString returns a new NTUnicodeString structure for use with native
    17  // NT APIs that work over the NTUnicodeString type. Note that most Windows APIs
    18  // do not use NTUnicodeString, and instead UTF16PtrFromString should be used for
    19  // the more common *uint16 string type.
    20  func NewNTUnicodeString(s string) (*NTUnicodeString, error) {
    21  	s16, err := syscall.UTF16FromString(s)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	n := uint16(len(s16) * 2)
    26  	// https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdmsec/nf-wdmsec-wdmlibrtlinitunicodestringex
    27  	return &NTUnicodeString{
    28  		Length:        n - 2, // subtract 2 bytes for the NUL terminator
    29  		MaximumLength: n,
    30  		Buffer:        &s16[0],
    31  	}, nil
    32  }
    33  

View as plain text