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