code: func sysCredEnumerate(filter string, all bool) ([]*Credential, error) {
  	var count int
  	var pcreds uintptr
  	var filterPtr uintptr
  	if !all {
  		filterUtf16Ptr, _ := syscall.UTF16PtrFromString(filter)
  		filterPtr = uintptr(unsafe.Pointer(filterUtf16Ptr))
  	} else {
  		filterPtr = 0
  	}
  	ret, _, err := procCredEnumerate.Call(
  		filterPtr,
  		0,
  		uintptr(unsafe.Pointer(&count)),
  		uintptr(unsafe.Pointer(&pcreds)),
  	)
  	if ret == 0 {
  		return nil, err
  	}
  	defer procCredFree.Call(pcreds)
  	credsSlice := *(*[]*sysCREDENTIAL)(unsafe.Pointer(&reflect.SliceHeader{
  		Data: pcreds,
  		Len:  count,
  		Cap:  count,
  	}))
  	creds := make([]*Credential, count, count)
  	for i, cred := range credsSlice {
  		creds[i] = sysToCredential(cred)
  	}
  
  	return creds, nil
  }
docs: // https://msdn.microsoft.com/en-us/library/windows/desktop/aa374794(v=vs.85).aspx