@@ -284,6 +284,9 @@ func NewCallbackCDecl(fn interface{}) uintptr {
284
284
// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL.
285
285
//sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW
286
286
//sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW
287
+ //sys initializeProcThreadAttributeList(attrlist *_PROC_THREAD_ATTRIBUTE_LIST, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList
288
+ //sys deleteProcThreadAttributeList(attrlist *_PROC_THREAD_ATTRIBUTE_LIST) = DeleteProcThreadAttributeList
289
+ //sys updateProcThreadAttribute(attrlist *_PROC_THREAD_ATTRIBUTE_LIST, flags uint32, attr uintptr, value uintptr, size uintptr, prevvalue uintptr, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute
287
290
288
291
// syscall interface implementation for other packages
289
292
@@ -1240,3 +1243,23 @@ func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overla
1240
1243
func PostQueuedCompletionStatus (cphandle Handle , qty uint32 , key uint32 , overlapped * Overlapped ) error {
1241
1244
return postQueuedCompletionStatus (cphandle , qty , uintptr (key ), overlapped )
1242
1245
}
1246
+
1247
+ // newProcThreadAttributeList allocates new PROC_THREAD_ATTRIBUTE_LIST, with
1248
+ // the requested maximum number of attributes, which must be cleaned up by
1249
+ // deleteProcThreadAttributeList.
1250
+ func newProcThreadAttributeList (maxAttrCount uint32 ) (* _PROC_THREAD_ATTRIBUTE_LIST , error ) {
1251
+ var size uintptr
1252
+ err := initializeProcThreadAttributeList (nil , maxAttrCount , 0 , & size )
1253
+ if err != ERROR_INSUFFICIENT_BUFFER {
1254
+ if err == nil {
1255
+ return nil , errorspkg .New ("unable to query buffer size from InitializeProcThreadAttributeList" )
1256
+ }
1257
+ return nil , err
1258
+ }
1259
+ al := (* _PROC_THREAD_ATTRIBUTE_LIST )(unsafe .Pointer (& make ([]byte , size )[0 ]))
1260
+ err = initializeProcThreadAttributeList (al , maxAttrCount , 0 , & size )
1261
+ if err != nil {
1262
+ return nil , err
1263
+ }
1264
+ return al , nil
1265
+ }
0 commit comments