備忘録として書いておきます。
Win32API宣言時のDllImportに、"SetLastError=true" を付加する。
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
プログラムコード上で実際に、GetLastError を実行したい部分では、GetLastError の代わりに、Marshal.GetLastWin32Error() を使用する。
エラーコード一覧は、下記サイトなんかがいいのではないでしょうか(回線速度によっては使えないかも)。
http://ir9.jp/prog/ayu/win32err.htm
また、エラー発生時に例外を発生させる場合は、
throw new Win32Exception(Marshal.GetLastWin32Error());
又は
throw new Win32Exception(Marshal.GetLastWin32Error(), "(補足情報)");
といった記述のほか、以下の様な記述も出来ます。
int hResult = Marshal.GetHRForLastWin32Error();
Marshal.ThrowExceptionForHR(hResult);
※この場合、Marshal.GetExceptionForHR を使用して、より柔軟な例外コード記述も可能