Windowsではログオンしたユーザごとにセッションが存在しています。(セッション 0 の分離 - Windows 7 対応アプリケーションの互換性)
そのセッションのセッションIDをGo言語で取得するサンプルです。
本サンプルでは自プロセスIDを元にそのプロセスが存在しているセッションのセッションIDを取得します
■サンプルコード
package main import ( "fmt" "os" "syscall" "unsafe" ) func abort(funcname string, err error) { panic(fmt.Sprintf("%s failed: %v", funcname, err)) } var ( kernel32, _ = syscall.LoadLibrary("kernel32.dll") processIDToSessionID, _ = syscall.GetProcAddress(kernel32, "ProcessIdToSessionId") ) func main() { fmt.Printf("My Session Id: %d", MySessionID()) } func MySessionID() uint32 { var sessionID uint32 _, _, callErr := syscall.Syscall(uintptr(processIDToSessionID), 2, uintptr(os.Getpid()), uintptr(unsafe.Pointer(&sessionID)), 0) if callErr != 0 { abort("Call ProcessIdToSessionId", callErr) } return sessionID }
単純に、os.Getpid
の結果を引数にして、WindowsAPIのProcessIdToSessionId
を呼び出しているだけです。(ProcessIdToSessionId 関数)
■実行結果
My Session Id: 1
無事にセッションIDが取得できました