現在オフラインです。再接続するためにインターネットの接続を待っています

コード内でユーザーの偽装により、応答を停止または"Method Failed"のエラー メッセージが発生する場合があります。

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:821470
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
偽装ユーザーのメールボックスにアクセスするコードを実行する Microsoft Office Outlook 2007、Outlook 2003 または Outlook 2002 が応答を停止かとすると、次のようなエラー メッセージが表示される場合があります。
メソッド '~ 'のオブジェクト' ~' が失敗しました
原因
ユーザーを偽装すると、新しいスレッドが作成される場合に発生します。 MAPI およびコラボレーション データ オブジェクト (CDO) は、通常の関数として新しいスレッドを作成してこれらの新しいスレッドは、ユーザーの偽装トークンにフル アクセスを継承しません。

メモ MAPI で偽装は、サポートされている動作はありません。
回避策
マイクロソフトは提供プログラミング言語の使用方法の一例としてのみ、姿表現または暗黙に提供します。 これはに含まれますに、黙示または商品性および特定目的に対する適合性の黙示保証は一切制限はありません。 この資料ではであると見なすは、例示されているプログラミング言語を作成したりプロシージャをデバッグするためのツールと使い慣れた。 マイクロソフト サポート エンジニア、特定のプロシージャの機能の説明に役立ちます。 ただし、これらの追加機能を提供する手順を特定の要件を構築例変更は行って。

この問題を回避するには、コードを別のプログラムに 2 分割します。

For example, the first program should do the impersonation by using LogonUser, and then start the second program as a separate process by using CreateProcessAsUser as in the following sample Visual Basic code:
'<-- Launcher programConst LOGON32_LOGON_INTERACTIVE = 2Const LOGON32_PROVIDER_DEFAULT = 0Const CREATE_DEFAULT_ERROR_MODE = &H4000000Private Type STARTUPINFO   cb As Long   lpReserved As Long ' !!! must be Long for Unicode string   lpDesktop As Long  ' !!! must be Long for Unicode string   lpTitle As Long    ' !!! must be Long for Unicode string   dwX As Long   dwY As Long   dwXSize As Long   dwYSize As Long   dwXCountChars As Long   dwYCountChars As Long   dwFillAttribute As Long   dwFlags As Long   wShowWindow As Integer   cbReserved2 As Integer   lpReserved2 As Long   hStdInput As Long   hStdOutput As Long   hStdError As LongEnd TypePrivate Type PROCESS_INFORMATION   hProcess As Long   hThread As Long   dwProcessId As Long   dwThreadId As LongEnd TypePrivate Declare Function CreateProcessAsUser Lib "advapi32.dll" _      Alias "CreateProcessAsUserA" _      (ByVal hToken As Long, _      ByVal lpApplicationName As Long, _      ByVal lpCommandLine As String, _      ByVal lpProcessAttributes As Long, _      ByVal lpThreadAttributes As Long, _      ByVal bInheritHandles As Long, _      ByVal dwCreationFlags As Long, _      ByVal lpEnvironment As Long, _      ByVal lpCurrentDirectory As String, _      lpStartupInfo As STARTUPINFO, _      lpProcessInformation As PROCESS_INFORMATION) As LongPrivate Declare Function LogonUser Lib "advapi32.dll" Alias "LogonUserA" ( _      ByVal lpszUsername As String, _      ByVal lpszDomain As String, _      ByVal lpszPassword As String, _      ByVal dwLogonType As Long, _      ByVal dwLogonProvider As Long, _      phToken As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" ( _      ByVal hObject As Long) As LongPrivate Sub Command1_Click()      Dim hToken As Long      Dim ulResult As Long      Dim startup As STARTUPINFO      Dim process As PROCESS_INFORMATION          ulResult = LogonUser("ImpersonatedUsed", "ImpersonatedDomain", _         "ImpersonatedUserPassword", LOGON32_LOGON_INTERACTIVE, _            LOGON32_PROVIDER_DEFAULT, hToken)      If ulResult = 0 Then         MsgBox "Error in LogonUser:  " & Err.LastDllError         Exit Sub      End If      startup.cb = Len(startup)      'TODO: Replace 'mail.exe' with the name of the program you wish to start      ulResult = CreateProcessAsUser(hToken, 0&, "mail.exe", 0&, 0&, _         False, CREATE_DEFAULT_ERROR_MODE, 0&, "path", startup, process)      If ulResult = 0 Then         MsgBox "Error in CreateProcessAsUser:  " & Err.LastDllError         Exit Sub      End If          CloseHandle hToken    End Sub'<-- End of first program '<-- Start of second process'<-- Mail.exe project:Private Sub Command1_Click()On Error GoTo ErrHandler   Dim oSession 'As MAPI.Session   Set oSession = CreateObject("MAPI.Session")   oSession.Logon , , , , , True, "ServerName" & vbLf & "MailboxName"   Dim oFolder 'As MAPI.Folder   Set oFolder = oSession.GetDefaultFolder(1) 'CdoDefaultFolderInbox   Set oMessages = oFolder.Messages   Set oMessage = oMessages.GetFirst   MsgBox oMessage.Subject   Set oMessage = Nothing   MsgBox "1"   Set oMessages = Nothing   MsgBox "2"   Set oFolder = Nothing   MsgBox "3"   oSession.Logoff  '   MsgBox "4"      Set oSession = Nothing   MsgBox "Done"   Exit Sub    ErrHandler:   MsgBox Err.Number & "   -->   " & Err.Description   Set oMessage = Nothing   Set oMessages = Nothing   Set oFolder = Nothing   oSession.Logoff   Set oSession = NothingEnd Sub
状況
マイクロソフトとして認識していますこの問題を記載されているいるマイクロソフト製品の問題。
OFFQFE 8382

警告: この記事は自動翻訳されています

プロパティ

文書番号:821470 - 最終更新日: 01/11/2015 22:49:51 - リビジョン: 2.1

Microsoft Outlook 2002 Standard Edition, Microsoft Office Outlook 2003, Microsoft Office Outlook 2007

  • kbnosurvey kbarchive kberrmsg kbbug kbprb kbmt KB821470 KbMtja
フィードバック