Laden...

Sporadischer Absturz: 0xc000000d - An invalid parameter was passed to a service or function

Letzter Beitrag vor 3 Jahren 12 Posts 1.158 Views
Sporadischer Absturz: 0xc000000d - An invalid parameter was passed to a service or function

Hallo Leute,

ich hab' bei einem einzigen Benutzer das Problem, dass unsere Anwendung ohne zutun des Benutzers abstürzt (siehe Anhang). D. h. der Benutzer schaut nur auf die Eingabemaske und die Anwendung stürzt ohne weitere Benutzereingabe ab. Das ganze passiert total sporadisch und so gut wie in jeder vorhandenen Eingabemaske.

In der Main-Methode fangen wir UnhandledExceptions natürlich ab und handeln diese entsprechend. Das funktioniert auch immer - nur bei der oben beschriebenen Problematik nicht.


Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new System.UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
TaskScheduler.UnobservedTaskException += new EventHandler<UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);

Im Ereignisprotokoll werden bei diesen Abstürzen zwei Ereignisse protokolliert:

EventId 1000:> Fehlermeldung:

Name der fehlerhaften Anwendung: xxxx.exe, Version: 1.0.0.0, Zeitstempel: 0x609ab544
Name des fehlerhaften Moduls: ntdll.dll, Version: 10.0.14393.4350, Zeitstempel: 0x606eaf8d
Ausnahmecode: 0xc000000d
Fehleroffset: 0x00000000000fe2ec
ID des fehlerhaften Prozesses: 0xcd2c
Startzeit der fehlerhaften Anwendung: 0x01d756aaa6428410
Pfad der fehlerhaften Anwendung: D:\Application\Application\xxxx.exe
Pfad des fehlerhaften Moduls: C:\Windows\SYSTEM32\ntdll.dll
Berichtskennung: 27bc97d4-0852-41ce-af0f-42c5660e0e54
Vollständiger Name des fehlerhaften Pakets:
Anwendungs-ID, die relativ zum fehlerhaften Paket ist:


- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Application Error" /> 
  <EventID Qualifiers="0">1000</EventID> 
  <Level>2</Level> 
  <Task>100</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2021-06-01T16:34:56.256651000Z" /> 
  <EventRecordID>2050995</EventRecordID> 
  <Channel>Application</Channel> 
  <Computer>TERM</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>xxxx.exe</Data> 
  <Data>1.0.0.0</Data> 
  <Data>609ab544</Data> 
  <Data>ntdll.dll</Data> 
  <Data>10.0.14393.4350</Data> 
  <Data>606eaf8d</Data> 
  <Data>c000000d</Data> 
  <Data>00000000000fe2ec</Data> 
  <Data>cd2c</Data> 
  <Data>01d756aaa6428410</Data> 
  <Data>D:\Application\\Application\xxxx.exe</Data> 
  <Data>C:\Windows\SYSTEM32\ntdll.dll</Data> 
  <Data>27bc97d4-0852-41ce-af0f-42c5660e0e54</Data> 
  <Data /> 
  <Data /> 
  </EventData>
  </Event>

EventId 1026:> Fehlermeldung:

Anwendung: xxxx.exe
Frameworkversion: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet.
Ausnahmeinformationen: Ausnahmecode c000000d, Ausnahmeadresse 00007FFB9028E2EC

Wir verwenden das .NET Framework 4.5.1 auf einem Windows 2016 Remotedesktopserver.
Natürlich habe ich schon stundenlang (eher tagelang) im Netz nach einer Lösung gesucht, aber keine gefunden die mich irgendwie auf die Spur zur Ursache führen könnte.
Ganz einfache Ansätze wie Serverneustart, Virenscanner ausschalten, usw. haben wir natürlich schon ausprobiert.

Mittlerweile läuft fast täglich procdump (procdump -accepteula -e -ma pid) auf den Prozess des Benutzers, leider ist der Fehler noch nie aufgetreten während procdump lief (darauf warten wir aktuell noch).

Woran liegt es, dass der Fehler nicht durch die Event-Handler für die Unhandled Exceptions gefangen wird? Ist ein Memorydump der einzige Weg die Ursache zu ermitteln?

Danke & Gruß

hypersurf

Hallo hypersurf

Woran liegt es, dass der Fehler nicht durch die Event-Handler für die Unhandled Exceptions gefangen wird? Ist ein Memorydump der einzige Weg die Ursache zu ermitteln?

Sollte es sich um eine SEHException handeln (müsstest du mal prüfen), dann kann diese ab .NET FW 4 nicht mehr (ohne Weiteres) über die von dir verwendeten Event-Handler gefangen werden.
CLR Inside Out - Handling Corrupted State Exceptions
Ich würde ebenfalls den von dir versuchten Weg gehen und einen Memory-Dump anfertigen.

Grüße
spooky

Das liegt daran, daß der Fehler in einer nativen System-DLL ("ntdll.dll") auftritt. Der Fehlercode 0xc000000d bedeutet STATUS_INVALID_PARAMETER.

UnhandledException bezieht sich nur auf .NET Exceptions (keine nativen).

Evtl. mal das .NET Framework (komplett) neu installieren?

Werd' ich am Wochenende mal versuchen. Komisch ist wirklich, dass das Problem nur bei einem einzigen Benutzer (es sind 35 auf dem RDP-Server) auftritt.

Nur zur Sicherheit:
Die Benutzer arbeiten per RDP auf dem Terminalserver - richtig?
Dann bringt es wenig auf dem Client das Framework neu zu installieren - auf dem Client läuft ja von eurem Application gar nichts, dies passiert alles auf dem Terminalserver. Lösche auf dem Terninalserver mal das Profil des Benutzers.

VG Stefan

Yes, wir installieren am WE mal das Framework auf dem Server neu. Das Benutzerprofil hatten wir schon neu eingerichtet, hatte leider keine Auswirkung.
Kann's theoretisch auch etwas sein, was der Nutzer mit in die Sitzung bringt (Druckerweiterleitung)??

Also wenn es nur ein Benutzer ist, wird es meiner Meinung nach nicht an dem Framework des Servers liegen. In der RDP Verbindung kannst du lokale Ressourcen mal alles deaktivieren bis auf Zwischenablage (auch die Remoteaudioeinstellungen).

Wie sind die User mit dem Server verbunden? Gibt es hier eine AUusnahme welche nur auf diesen User zutrifft (z.B. VPN wegen HO?)

Stellt ihr die Applications als RemoteApp zur Verfügung?

Kann's theoretisch auch etwas sein, was der Nutzer mit in die Sitzung bringt (Druckerweiterleitung)??

Klar, an sowas wirds am Ende auch liegen werden. Irgendwas am Profil oder dem User-nahen Environment; tritt ja wie Du sagst auch nur bei diesem User auf.

Ich würd WinDbg (Debugging Tools for Windows) verwenden zur Analyse, damit lassen sich Exceptions wie STATUS_INVALID_PARAMETER und deren Verursacher inkl. Parameter-Values eigentlich einfach finden.

Woran liegt es, dass der Fehler nicht durch die Event-Handler für die Unhandled Exceptions gefangen wird?

Nicht alle Arten von Exceptions werden an die .NET Runtime weiter gereicht bzw. nicht alle Exceptions sind durch die Runtime abgreifbar.

Also wenn es nur ein Benutzer ist, wird es meiner Meinung nach nicht an dem Framework des Servers liegen. In der RDP Verbindung kannst du lokale Ressourcen mal alles deaktivieren bis auf Zwischenablage (auch die Remoteaudioeinstellungen).

Das hatten wir schon versucht, also Druckerweiterleitung, und was man sonst so mit in die Sitzung nehmen kann deaktiviert.
Ich hatte einen ähnlichen Fall mal mit dem PDF-Drucker von DATEV (SkyPDF heißt der glaub' ich). War dieser mit auf dem Server installiert kam es zu völlig sinnlosen Abstürzen, damals gabs aber einen Verweis auf den Drucker in den Einträgen im Eventlog.

Wie sind die User mit dem Server verbunden? Gibt es hier eine AUusnahme welche nur auf diesen User zutrifft (z.B. VPN wegen HO?)

Alle über's lokale Netzwerk.

Stellt ihr die Applications als RemoteApp zur Verfügung?

Nope, jeder hat seinen eigenen Desktop auf dem Server und startet dann die Anwendung. Außer der Anwendung läuft sonst nichts auf dem Server (keine weitere Software installiert).

Fehlen dem User irgendwelche Berechtigungen? Vergleiche doch mal mit einem User bei dem es keine Probleme gibt. Habt ihr servergespeicherte Profile?

Ist alles identisch zu anderen Benutzern. Es muss irgendwas sein, was der Benutzer mit in die Sitzung bringt.
Wir verschieben den Benutzer jetzt auf einen anderen Server und schauen mal, ob das Problem noch auftritt.

Wenn ihr servergespeicherte Profile verwendet wird das nichts bringen - falls es so ist, deaktiviere diese für den einzelnen User oder lege ihm ein komplett neues Profil an (ich weiß, man muss danach alles wieder einstellen/konfigurieren - aber manchmal hilft nur dieser Schritt).