<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Just do I(nformation)T(echnology) : Bug</title><link>http://blogs.technet.com/mpriem/archive/tags/Bug/default.aspx</link><description>Tags: Bug</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Debugging voor dummies</title><link>http://blogs.technet.com/mpriem/archive/2009/03/19/debugging-voor-dummies.aspx</link><pubDate>Thu, 19 Mar 2009 15:10:59 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3215160</guid><dc:creator>mpriem</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/mpriem/comments/3215160.aspx</comments><wfw:commentRss>http://blogs.technet.com/mpriem/commentrss.aspx?PostID=3215160</wfw:commentRss><description>&lt;p&gt;Een groot gedeelte van de supportcalls bij premier support heeft te maken met crashes, memory leaks en andere van die voor velen ongrijpbare problemen. In veel gevallen is de oorzaak echter redelijk simpel te achterhalen, en zou je een support call en veel tijd en ergernis kunnen besparen. Het probleem is dat velen niet weten dat je geen die-hard debugger hoeft te zijn om een memory dump te analyseren (ok. Ok. Eerste stap daartoe &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;.), of een memory leak te traceren. 
&lt;/p&gt;&lt;p&gt;Je hebt alleen de juiste tools nodig een klein duwtje in de goede richting. Die ga ik je vandaag geven &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;
	&lt;/p&gt;&lt;h2&gt;Tools
&lt;/h2&gt;&lt;p&gt;Er zijn een aantal tools die in mijn optiek niet mogen ontbreken in de gereedschapskist van een admin. Dat zijn:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Windows debugging tools: &lt;a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt;http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx&lt;/a&gt;
		&lt;/li&gt;&lt;li&gt;DebugDiag 1.1: &lt;a href="http://www.microsoft.com/downloadS/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloadS/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en&lt;/a&gt;
		&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;De installatie spreekt voor zich, dus daar ga ik jullie niet mee vervelen, echter voor de debugger die we gaan gebruiken (WinDBG) is het aan te raden een symbolserver te configureren (&lt;a href="http://www.microsoft.com/whdc/DevTools/Debugging/debugstart.mspx"&gt;http://www.microsoft.com/whdc/DevTools/Debugging/debugstart.mspx&lt;/a&gt;) . In principe is dat voor deze eerste stapjes in de wereld van debugging nog niet nodig, maar ik zou het niet laten, daar het je toch net even wat meer inzicht geeft in wat er precies gebeurd onder de motorkap. Ik prefereer de Environmental Variable, aangezien deze door veel debugtools automatisch wordt opgepakt.
&lt;/p&gt;&lt;h2&gt;Introductie
&lt;/h2&gt;&lt;p&gt;In deze post ga ik drie type scenario's behandelen. Dat zijn: 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Eerste analyse van een kerneldump, naar aanleiding van een crash/BSOD (Blue-Screen-Of-Death).
&lt;/li&gt;&lt;li&gt;Troubleshooten van usermode crashes.
&lt;/li&gt;&lt;li&gt;Troubleshooten van memorydumps.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Voordat we daaraan beginnen zal ik toch een klein stukje theorie moeten behandelen, om een en ander duidelijk te maken.&lt;br/&gt;Moderne CPU architecturen hebben verschillende modi waarin zij opereren. Deze noemen we ook wel Rings (er zijn nog tig andere benamingen). Deze modi stellen een ontwikkelaar in staat bepaalde functionaliteit van de CPU architectuur niet toe te staan voor de code die op dat moment wordt uitgevoerd. Denk hierbij aan toegang tot bepaalde CPU registers of onderdelen van het geheugen. Dit om de stabiliteit en veiligheid van het systeem te waarborgen. In Windows NT besturingssystemen (Alles behalve 3.*, 9* en ME) maken we gebruik van 2 van deze modi, namelijk de modus waarin alles is toegestaan, welke wij 'Kernelmode' noemen (Ring 0) en een modus waarin toegang tot hardwareresources beperkt worden, welke wij 'Usermode' noemen (Ring 3; in x86 en x64 architecturen zijn het er 3 (Ring 1,2,3), maar Windows gebruikt alleen de meest beperkte). De structuur van Windows zorgt ervoor dat eigenlijk alleen code die hoort bij het operating system in Kernelmode mag draaien. Er zijn wat uitzonderingen, waarvan drivers de meest belangrijke zijn.&lt;br/&gt;Code wat in Kernelmode draait heeft dus onbeperkt toegang tot systeemresources, en kan dus ook geheugen structuren veranderen van andere processen, wat kan leiden tot datacorruptie, dataloss en een instabiel systeem. Windows beschermt zich hiertegen door in dergelijke gevallen op de noodknop te drukken en het systeem te stoppen of bugchecken met een BSOD. Wij noemen dit een crash, maar het is eigenlijk Windows die je redt van nog grotere problemen. Windows zal dan op basis van de instellingen wel of niet een dump maken van het kernelgeheugen. Dit heb je niet voor usermode processen.&lt;br/&gt;Code wat in Usermode draait heeft dus beperkte toegang tot systeemresources. Zo heeft het alleen toegang tot geheugenbereik dat het proces toegewezen heeft gekregen en dient het toegang tot hardware aan te vragen bij het operating system. Qua performance lever je hierdoor wel wat in, maar bijkomend voordeel is dat het ene proces niet zo makkelijk een ander proces om zeep kan helpen, laat staan een BSOD kan veroorzaken, en je een verhoogde mate van veiligheid hebt, doordat geheugenstructuren van het ene proces niet uit te lezen zijn door het andere proces.
&lt;/p&gt;&lt;p&gt;Waarom is deze informatie nu belangrijk? 
&lt;/p&gt;&lt;p&gt;Voor deze post om twee redenen: &lt;br/&gt;Enerzijds is het belangrijk om te weten dat een BSOD dus in bijna alle gevallen veroorzaakt wordt door OF een bug in het operating system, OF een driver. &lt;br/&gt;&lt;strong&gt;9 van de 10 keer zal het gaan om een driver.&lt;br/&gt;&lt;/strong&gt;Anderzijds is het belangrijk om te begrijpen dat het analyseren van een usermode crash anders is dan het analyseren van een kernelmode crash. Bij een kernmode crash heb je vaak de beschikking over een volledige dump van het geheugen. Bij usermode crashes, moet je memorydumps zelf generen en verzamelen.
&lt;/p&gt;&lt;h2&gt;Blue Screen of Death – BSOD
&lt;/h2&gt;&lt;p&gt;Wanneer een systeem geplaagd wordt door BSODs is de eerste plaats waar je gaat kijken de memorydump. Ik ben van mening dat elk systeem geconfigureerd moet zijn om een volledige dump te maken, daar in de volledige dump de meeste informatie staat. Je kan met een MiniDump soms ook wel af, maar meestal zal een support engineer vragen om de volledige dump. Ik neem aan dat je jouw systeem niet nogmaals wilt laten crashen met alle gevolgen van dien voor de data en uiteindelijk de business. Opties voor het maken van een memorydump kan je vinden op &lt;a href="http://support.microsoft.com/kb/254649/en-us"&gt;http://support.microsoft.com/kb/254649/en-us&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;Verder adviseer ik mijn klanten altijd, dat als er een memorydump heeft plaatsgevonden, deze veilig te stellen. Een volgende dump overschrijft deze namelijk. Meerdere dumps is handig daar de oorzaak van de crash niet altijd meteen duidelijk is. Helaas is dit vaak het geval. Het kan namelijk zijn dat de veroorzaker van de crash allang uit het geheugen is verdwenen, voordat het systeem struikelt over het probleem dat deze code veroorzaakt heeft. Door meerdere dumps te analyseren kan je soms correlaties trekken, en zo tot een conclusie komen.
&lt;/p&gt;&lt;p&gt;Goed… We hebben een crash gehad en we hebben een memory dump. What's next??
&lt;/p&gt;&lt;p&gt;We starten WinDBG en openen de memory dump. Deze dump is standaard te vinden op %SystemRoot%\Memory.dmp. Je kan uiteraard de memory dump naar een andere machine kopiëren en hem daar analyseren:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo1.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Nu je de memorydump geopend hebt, zal WinDBG de dump snel analyseren. Dit levert al vaak meteen waardevolle informatie op, zoals je kan zien op de analyse van 1 van mijn recente dumps:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo2.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas"&gt;Probably caused by : rismcx64.sys … &lt;/span&gt;Schijnbaar geeft WinDBG rismcx64.sys de schuld. Een korte blik in mijn drivers, gaf aan dat het om een smartcard driver ging uit 2006. Even een bezoekje aan de Windows Update en de vendor website en voila.. Nieuwe drivers. Sindsdien heb ik die crash nooit meer gehad.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo3.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Nu kan je WinDBG een verbose output laten zien van deze analyse, waar je vaak ook wel wat aan hebt. Dit doe je door &lt;span style="font-family:Consolas"&gt;!analyze –v&lt;/span&gt; uit te voeren. De output laat dan bijvoorbeeld ook de stacktrace zien, die je een idee kan geven, van wat het systeem op dat moment aan het doen was:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo4.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Je leest een stacktrace altijd van onder naar boven. In mijn dump was windows duidelijk bezig met het afhandelen van een IO request richting mijn smartcard device, te zien aan termen als IopXxxControlFile, NTDeviceIoControlFile en andere IO routines. Verder zie je verwijzingen naar Wdf modules wat staat voor Windows Driver Foundation. Deze informatie kan ik zien doordat ik WinDBG geconfigureerd heb om de public symbols van de Microsoft SymbolServer te halen. Zonder symbols ziet de output er anders uit.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo5.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Een hele hoop van de functienamen zijn weggevallen. Hierdoor is het lastig in 1 oogopslag te bepalen of de modules behoren tot het besturingssysteem of niet. Ik kijk altijd even naar de stacktrace. Je kan bijvoorbeeld zien of er nog andere 3rd party modules zijn die rond die tijd acties aan het uitvoeren zijn geweest. Deze kan je dan vervolgens eveneens aan een grondig onderzoek onderwerpen.
&lt;/p&gt;&lt;p&gt;Zo zie je… In een aantal simpele stappen kan je al snel wat zaken uitzoeken en proberen voordat je een case aanmeldt om een BSOD te laten onderzoeken.
&lt;/p&gt;&lt;h2&gt;User mode crash
&lt;/h2&gt;&lt;p&gt;Voor usermode crashes heb je standaard geen memory dumps. Echter je kan een debugger attachen aan een proces en een memory dump laten generen op het moment dat deze klapt. In de debugging tools kan dat op verschillende manieren, maar ik gebruik eigenlijk altijd DebugDiag, wat een schil rondom de debuggers uit de debugging tools is.
&lt;/p&gt;&lt;p&gt;In mijn geval crashed een application pool regelmatig. Ik start dus debugdiag en kies voor de 'Crash' optie (een Hang is niet hetzelfde als een crash):&lt;br/&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo6.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Vervolgens kan ik twee kanten op. Ik kan kiezen voor een proces, en selecteer gewoon het juiste w3wp.exe proces, of ik kies voor Application Pool. Dit is uiteraard eenvoudiger dus doe ik dat:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo7.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Vervolgens kies ik de application pool, en krijg ik de mogelijkheid om advanced opties mee te geven, zoals op welke Exceptions debugdiag moet reageren. Ik selecteer gewoon de standaard opties, daar dat in de meeste gevallen voldoende is.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo8.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Uiteindelijk kies ik Next &amp;gt; Next &amp;gt; Activate Rule.
&lt;/p&gt;&lt;p&gt;Als dan vervolgens het proces klapt, maakt DebugDiag een memory dump, welke geanalyseerd kan worden. Na een paar keer mijn webapplicatie te hebben geprobeerd te starten, had ik 3 memory dumps:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo9.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Ik kan dan vervolgens kiezen om de data te laten analyseren door &lt;strong&gt;Analyze Data&lt;/strong&gt; te selecteren. Na een tijdje door de dumps te hebben gewroet, laat DebugDiag een rapport zien met de bevindingen. In de meeste gevallen kan je dat rapport gebruiken om verder onderzoek te plegen. In mijn geval wist ik wat het probleem was, daar ik zelf een kapotte ISAPI filter had gebakken om demo's van DebugDiag te geven. Het rapport laat daarom ook netjes zien dat mijn UpCaseStackOverflow.dll filter het probleem heeft veroorzaakt.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo10.png" alt=""/&gt;
	&lt;/p&gt;&lt;h2&gt;Memory Leaks
&lt;/h2&gt;&lt;p&gt;Memory Leaks worden vaak gezien als zeer lastige problemen om te analyseren, maar met de juiste tools valt dat best mee. Ook hier gebruik ik meestal DebugDiag voor. Je start DebugDiag en kiest voor &lt;strong&gt;Memory and Handle Leak&lt;/strong&gt;. Vervolgens kies je het proces waaraan je de debugger wilt koppelen. Het valt hier op dat we nu niet de keuze hebben om een Application pool te kiezen. Als je nu meerdere application pools hebt, en deze ook nog eens onder hetzelfde application pool account draait, lijkt het lastig deze processen te onderscheiden. Gelukkig is er een redelijk makkelijke manier om erachter te komen om welke application pool het gaat. Je scrolled helemaal naar rechts in het DebugDiag window en controlleert de commandline kolom. Dit bevat de naam van de application pool:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo11.png" alt=""/&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo12.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Je dient vervolgens aan te geven wanneer er precies een Memory dump gemaakt moet worden. Dit kan na een bepaalde tijd, maar vaak is het handiger een maximum aantal MB's aan te geven. Dit doe je door te kiezen voor &lt;strong&gt;Configure&lt;/strong&gt; in de &lt;strong&gt;Userdump generation &lt;/strong&gt;sectie:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo13.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Ik kies hier meestal voor Virtual Bytes, omdat Private Bytes daar een subset van is. Virtual Bytes is namelijk het aantal bytes dat het proces gealloceerd heeft binnen het Virtual Address Space van het proces. Private Bytes is het geheugen dat gealloceerd is dat exclusief te benaderen is door het proces. Wanneer een proces namelijk een module laadt met shareable data (code afhankelijk dus), die al geladen is door een ander proces, wordt deze niet nogmaals in het geheugen geladen, maar gedeeld door processen. Dit geheugen wordt gemapped naar het proces. De virtual bytes geven vervolgens aan dat het proces het aantal bytes voor die module gealloceerd heeft, maar fysiek is er geen extra geheugen gebruikt. Deze shareable bytes zie je dus ook niet terug in de Private Bytes. 
&lt;/p&gt;&lt;p&gt;Om te bepalen wanneer een memory dump te maken, zal je monitoring moeten inregelen. Dit kan door System Monitor (perfmon) te gebruiken en de Private Bytes en Virtual Bytes van het systeem en processen te monitoren.
&lt;/p&gt;&lt;p&gt;Als laatste selecteer ik weer &lt;strong&gt;Next &amp;gt; Next &amp;gt; Activate Rule&lt;/strong&gt; en kan het wachten beginnen.&lt;br/&gt;Zodra er weer een memorydump is gemaakt, kies je wederom voor &lt;strong&gt;Analyze Data&lt;/strong&gt; en Voila… een rapport.
&lt;/p&gt;&lt;p&gt;Net als bij de Usermode Crash, was het in mijn geval wederom een zelf geschreven ISAPI filter, met ditmaal een memory leak. Het rapport laat ook netjes zien dat er een module UpCaseLeak.dll is in mijn w3wp.exe proces die aardig wat geheugen heeft gealloceerd. In dit geval heeft DebugDiag te kort gelopen om echt een harde analyse te doen, maar je snapt waar dit heengaat.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/blogfiles/mpriem/031909_1210_Debuggingvo14.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Zo zie je… Debugging is niet alleen voor code junkies, maar iedereen kan een aantal basis stappen zetten, die in veel gevallen al tot de oorzaak van het probleem kunnen leiden!
&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3215160" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/mpriem/archive/tags/101/default.aspx">101</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Bug/default.aspx">Bug</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category></item><item><title>MSExchangeIS event id 9874 (icm Forefront)</title><link>http://blogs.technet.com/mpriem/archive/2008/04/23/msexchangeis-event-id-9874-icm-forefront.aspx</link><pubDate>Wed, 23 Apr 2008 17:44:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3127280</guid><dc:creator>mpriem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/mpriem/comments/3127280.aspx</comments><wfw:commentRss>http://blogs.technet.com/mpriem/commentrss.aspx?PostID=3127280</wfw:commentRss><description>&lt;P&gt;Op verschillende plaatsen heb ik meldingen gelezen over bedrijven die last hebben van eventid 9874:&lt;BR&gt;&lt;CODE&gt;&lt;FONT face=Georgia&gt;Event Type:&amp;nbsp;Warning&lt;BR&gt;Event Source:&amp;nbsp;MSExchangeIS&lt;BR&gt;Event Category:&amp;nbsp;Virus Scanning&lt;BR&gt;Event ID:&amp;nbsp;9874&lt;BR&gt;Date:&amp;nbsp;&amp;nbsp;3/17/2008&lt;BR&gt;Time:&amp;nbsp;&amp;nbsp;12:23:57 PM&lt;BR&gt;User:&amp;nbsp;&amp;nbsp;N/A&lt;BR&gt;Computer:&amp;nbsp;&amp;lt;servername&amp;gt;&lt;BR&gt;Description:&lt;BR&gt;Unexpected error 0x50a occurred in "EcProcessVirusScanQueueItem" during virus scanning.&lt;BR&gt;Mailbox Database: /o=&amp;lt;orgname&amp;gt;/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=&amp;lt;servername&amp;gt;/cn=Microsoft Private MDB&lt;BR&gt;Folder ID: 1-24&lt;BR&gt;Message ID: 1-D616AA3D &lt;/FONT&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;&lt;FONT face=Georgia&gt;For more information, see Help and Support Center at &lt;A href="http://go.microsoft.com/fwlink/events.asp" mce_href="http://go.microsoft.com/fwlink/events.asp"&gt;http://go.microsoft.com/fwlink/events.asp&lt;/A&gt;.&lt;BR&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG class=mce_plugin_wordpress_more title=More... height=10 alt=More... src="http://www.spurius.nl/wp-includes/js/tinymce/themes/advanced/images/spacer.gif" width="100%" name=mce_plugin_wordpress_more moretext=""&gt;&lt;/P&gt;
&lt;P&gt;Dit event heeft te maken met dat Forefront bepaalde instellingen in het register niet goed kan verwerken. In mijn geval had het te maken met Background scanning opties die niet aanwezig waren in [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\VirusScan].&lt;/P&gt;
&lt;P&gt;Dit is de juiste inhoud van de key voor een server met alleen de mailboxrole (De ontbrekende DWORDS zijn vet gedrukt):&lt;/P&gt;
&lt;P&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\VirusScan]&lt;BR&gt;"Library"="C:\\Program Files (x86)\\Microsoft Forefront Security\\Exchange Server\\FSEVsapiEx.dll"&lt;BR&gt;"BackgroundScanning"=dword:00000000&lt;BR&gt;"ProactiveScanning"=dword:00000000&lt;BR&gt;"ScanRTF"=dword:00000001&lt;BR&gt;"ScanTimeout"=dword:00000258&lt;BR&gt;"EnableScanDeletion"=dword:00000001&lt;BR&gt;"OnAccessScanningRollingLowerAgeLimit"=dword:00360d80&lt;BR&gt;"ReloadNow"=dword:00000000&lt;BR&gt;"Enabled"=dword:00000001&lt;BR&gt;"OnAccessThresholdVersion"=dword:00000001&lt;BR&gt;&lt;STRONG&gt;"BackgroundScanningIgnoreStamp"=&lt;/STRONG&gt;dword:00000001&lt;BR&gt;&lt;STRONG&gt;"BackgroundScanningOnlyUnscanned"=&lt;/STRONG&gt;dword:00000001&lt;BR&gt;&lt;STRONG&gt;"BackgroundScanningAttachmentMessagesOnly"=&lt;/STRONG&gt;dword:00000001&lt;/P&gt;
&lt;P&gt;Dit kwam omdat de Background scanning job een keer gedraaid moet hebben om deze key op de juiste manier&amp;nbsp;te vullen. Dit doe je door in Forefront het schedule voor de background scanning job aan te passen dat de job in ieder geval 1 keer draait.&lt;/P&gt;
&lt;P&gt;Microsofts best practice is om deze job wekelijks te draaien en dan alleen unscanned&amp;nbsp;berichten te scannen, ontvangen in de laatste week, met attachment.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3127280" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/mpriem/archive/tags/Exchange+2007/default.aspx">Exchange 2007</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Bug/default.aspx">Bug</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Forefront/default.aspx">Forefront</category></item><item><title>Meeting forward notification crashed Outlook</title><link>http://blogs.technet.com/mpriem/archive/2008/02/11/meeting-forward-notification-crashed-outlook.aspx</link><pubDate>Mon, 11 Feb 2008 18:43:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3127279</guid><dc:creator>mpriem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/mpriem/comments/3127279.aspx</comments><wfw:commentRss>http://blogs.technet.com/mpriem/commentrss.aspx?PostID=3127279</wfw:commentRss><description>&lt;P&gt;In Exchange 2007 heb je een nieuwe functie die ervoor zorgt dat de organisator van een meeting een forward notificatie krijgt als zijn meeting geforward wordt naar een andere mailbox.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="Meeting forward" src="http://www.spurius.nl/wp-content/uploads/2008/02/forward.jpg" mce_src="http://www.spurius.nl/wp-content/uploads/2008/02/forward.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Outlook 2003's "New Mail Desktop Alert" kan daar echter niet goed mee omgaan en crashed Outlook 2003 als deze niet op SP3 zit.&lt;/P&gt;
&lt;P&gt;Oplossingen/Workarrounds zijn dus:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Disable de "New Mail Desktop Alert" via Options &amp;gt; Preferences &amp;gt; E-Mail Options &amp;gt; Advanced E-Mail Options&amp;gt; uncheck "Display a New Mail Desktop Alert".&lt;/LI&gt;
&lt;LI&gt;Uitrollen SP3 voor Outlook 2003&lt;/LI&gt;
&lt;LI&gt;AV of Antispam oplossing dusdanig configureren dat de Meeting forwards niet aankomen&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3127279" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/mpriem/archive/tags/Exchange+2007/default.aspx">Exchange 2007</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Bug/default.aspx">Bug</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Outlook/default.aspx">Outlook</category></item><item><title>Exchange 2007 SP1 veroorzaakt problemen met Calendar items icm Blackberry</title><link>http://blogs.technet.com/mpriem/archive/2008/01/04/exchange-2007-sp1-veroorzaakt-problemen-met-calendar-items-icm-blackberry.aspx</link><pubDate>Fri, 04 Jan 2008 18:42:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3127277</guid><dc:creator>mpriem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/mpriem/comments/3127277.aspx</comments><wfw:commentRss>http://blogs.technet.com/mpriem/commentrss.aspx?PostID=3127277</wfw:commentRss><description>&lt;P&gt;Blackberry Enterprise Server 4.1 MR4 geeft problemen met calendar items in combinatie met Exchange 2007 SP1.&lt;BR&gt;Wanneer een meeting request ontvangen wordt op de Blackberry, flagt het device deze als 'Tentatively Accepted'.&lt;/P&gt;
&lt;P&gt;In Outlook zie je het volgende op het meeting request bij de uitgenodigde met een Blackberry:&lt;IMG alt="Tentatively accepted" src="http://www.spurius.nl/wp-content/uploads/2008/02/tentative1.jpg" mce_src="http://www.spurius.nl/wp-content/uploads/2008/02/tentative1.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Degene die de meeting georganiseerd heeft, heeft echter geen response gekregen:&lt;BR&gt;&lt;IMG alt="Tracking info tentative probleem" src="http://www.spurius.nl/wp-content/uploads/2008/02/tentative2.jpg" mce_src="http://www.spurius.nl/wp-content/uploads/2008/02/tentative2.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Dit probleem treedt op ongeacht welke handheld je hebt. Het probleem is bekend bij RIM, echter het response is minder leuk:&lt;/P&gt;
&lt;ADDRESS class=vb_postbit id=post_message_818804&gt;"Thank you for contacting BlackBerry Customer Support. 
&lt;P&gt;The issue you have found has been identified by the BlackBerry Development Team and has been flagged to be addressed. The SDR relating to this is SDR144817 and all I can advise is you check the next release of the BlackBerry Enterprise Software if this has been fixed and included it will be in the release notes"&lt;/P&gt;&lt;/ADDRESS&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3127277" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/mpriem/archive/tags/Exchange+2007/default.aspx">Exchange 2007</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Service+Pack/default.aspx">Service Pack</category><category domain="http://blogs.technet.com/mpriem/archive/tags/SP1/default.aspx">SP1</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Bug/default.aspx">Bug</category></item><item><title>Nog een reden waarom Public folders mogen verdwijnen.....</title><link>http://blogs.technet.com/mpriem/archive/2007/12/07/nog-een-reden-waarom-public-folders-mogen-verdwijnen.aspx</link><pubDate>Fri, 07 Dec 2007 18:27:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3127264</guid><dc:creator>mpriem</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/mpriem/comments/3127264.aspx</comments><wfw:commentRss>http://blogs.technet.com/mpriem/commentrss.aspx?PostID=3127264</wfw:commentRss><description>&lt;P&gt;Naast het feit dat ik een mailsysteem geen plek vind om informatie met elkaar te delen, ben ik deze week achter nog een reden gekomen waarom public folders uit Exchange 2007 moeten verdwijnen. Dit heeft alles te maken met een probleem waar ik een maand mee bezig ben geweest...&lt;BR&gt;&lt;IMG class=mce_plugin_wordpress_more title=More... height=10 alt=More... src="http://www.spurius.nl/wp-includes/js/tinymce/themes/advanced/images/spacer.gif" width="100%" name=mce_plugin_wordpress_more moretext=""&gt;&lt;BR&gt;Vorige maand is de klant waar ik momenteel voor werk een Exchange 2007 pilot gestart in een redelijk grote bestaande Exchange 2003 organisatie. Deze omgeving telt 100+ servers verspreid over 4 continenten. Daarbinnen hebben ze 52 Public Folder stores.&lt;/P&gt;
&lt;P&gt;De initiele pilot groep telde +- 30 gebruikers, welke in UAT uitgebreid zou gaan worden naar +- 250 gebruikers. Vanaf het begin af aan kreeg ik klachten dat geheel willekeurig een Outlook client ineens bleef hangen voor 1 a 2 minuten, waarbij "retrieving data" popups verschenen, welke verwezen naar de 2007 public folder server die opgetuigd was voor de pilot users. Na verschillende perfmon sessies te hebben gedraaid op deze server, kon ik geen performance issues vinden. De hardware functioneerde prima, en ook de lokale GC's lieten geen problemen zien. Wel zagen we om het half uur hoge "RPC average latency" pieken. Na ook met network monitor aan de slag te zijn gegaan konden we zien dat de server elk half uur een waslijst aan Exchange servers verspreid over het hele forest aan het benaderen waren. We konden alleen zien dat het NetLogon verkeer was, aangezien de content encrypted is.&lt;/P&gt;
&lt;P&gt;Microsoft werd erbij gehaald, maar na een week ploeteren hadden we nog geen inzicht in wat het probleem nou precies was. We hadden in de tussentijd al van alles gedaan. IsInteg gedraaid, andere public folder stores geprobeert. Aangezien de problemen zo willekeurig optraden konden we niet goed zien wat er nu precies gaande was. Het leek erop dat het probleem vaak optrad bij het opstarten van Outlook. Echter waren er ook berichten dat het ook gebeurde als iemand andere zaken aan het doen was of zelfs helemaal niets aan het doen was. In een poging het probleem in de kraag te vatten had ik Netmon op mijn werkstation weten te krijgen (is gesloten omgeving dus was een hele klus om toestemming te krijgen). Door via script Outlook om de 7 seconden te openen en te sluiten, hoopte ik te kunnen tracen wat Outlook nou precies vraagt, waar Exchange nu zo'n moeite mee heeft. na 3 uur had ik beet. Na de capture opgestuurt te hebben naar Microsoft (zij kunnen namelijk delen van RPC pakketjes decrypten), bleek dat het om een request te gaan waarbij Outlook vroeg op content van de "Outlook Security Forms". Om er zeker van te zijn moesten we proberen nog een packet te capturen, maar tegelijkertijd ook een perfmon en netmon sessie op de server te starten.&lt;/P&gt;
&lt;P&gt;Dit bleek lastig aangezien we al moeite hadden het te triggeren met script. Op mijn werkstation was het al meer dan een week niet "zomaar" voorgekomen. Na intern overleg had ik toestemming op nog een aantal werkstations netmon te installeren. Echter bleek dit niet nodig te zijn, want na ik wat beter naar de netmon capture van de server te kijken en naar de perfmon sessie, kon ik een patroon vinden waarbij er telkens om het half uur een RPC request gedaan werd, waarna Exchange al die PF servers afging. Nadat dat klaar was, kwam er een RPC response, en precies op dat moment schoot de RPC average latency omhoog. Microsoft vroeg mij verschillende malen memorydumps te maken van store.exe. Tijdens de rpc peak, vlak voor de rpc peak etc etc. In totaal hebben we 15 GB aan dumps op moeten sturen. In de tussentijd was er een CPR engineer onsite geweest omdat MS zelf ook niet wist wat er nu precies gaande was. Veel meer dan meekijken kon hij niet. Kreeg meer de indruk dat hij kwam kijken of we de boel niet voor de gek aan het houden waren.&lt;BR&gt;Enfin, Na een paar dagen was Microsoft klaar met het analyseren van de memory dumps en wat bleek. Het probleem werd veroorzaakt doordat Outlook de Public Folder hierarchy wilde laten reloaden. Dit kwam doordat er public folder stores in de hierarchy zaten die niet meer bestonden. Dit kan komen doordat public folder stores voor Exchange 2003 sp2 gewoon verwijdert konden worden, zonder de replicas te verplaatsen naar andere servers. Nu had ik in die omgeving al een keer een schoningsactie gehouden waarbij System folders van oude stores verwijdert waren en de replicalijst aardig schoon was (replstate test van ISINTEG schoont deze op). Echter het blijkt dat de replicalijst ook nog op andere plaatsen in de PF store opgeslagen wordt. Deze "orphaned" entries op die plek kunnen dus niet verwijdert worden en zorgen ervoor dat ze blijven voorkomen in de hierarchie. Outlook ziet de guids van deze nietbestaande PF stores en zal elke keer wanneer het de hierachie opvraagt vragen om een reload. Nu doet Exchange dit standaard 1 keer per uur, maar op aanvraag doet Exchange dat dus sneller, als er maar minimaal een half uur tussen zit.... Laat dat nu net de interval zijn dat we die high latency pieken zien.&lt;/P&gt;
&lt;P&gt;Wat blijkt nu? In Exchange 2003 hadden we dat probleem dus ook, maar hadden we geen Outlook clients die hingen. Dat komt omdat de reload van Exchange 2003 veel sneller ging. In Exchange 2003 gebruiken we routinggroup connectoren met costs. Door een paar snelle AD queries kan Exchange dus heel snel de hierarchie opbouwen.&lt;BR&gt;In Exchange 2007 gebruiken we echter AD sites met costs. Echter op een serverobject in AD staat niet in welke AD-site deze zit. Exchange moet dat dus zien te bepalen. En waar hebben de programmeurs voor gekozen??? ...Precies... Een sessie opzetten met de server om zo de site te achterhalen. Vandaar dat we de Netlogons zagen. En servers in Azie en Australie reageren nu eenmaal niet zo snel als ze achter high latency lijntjes zitten. Dus om het half uur wachtte een client totdat Exchange sessies had opgezet naar 52 PF server in de organisatie.&lt;/P&gt;
&lt;P&gt;Hoe nu verder? Nou... Niet met Exchange 2007 public folders dus voorlopig. Als het aantal is teruggebracht van 53 naar 8, dan kunnen we erover denken, maar nu niet.&lt;BR&gt;Er is wel de mogelijkheid om het &lt;A href="http://support.microsoft.com/kb/873415" mce_href="http://support.microsoft.com/kb/873415"&gt;interval van reloaden &lt;/A&gt;aan te passen. Dit doe je door een DWORD aan te maken in&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsExchangeIS\&lt;SERVERNAME&gt;&lt;/SERVERNAME&gt;\Public-(guid)&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Dit DWORD moet heten "Replication Reload TLH Min" en de waarde is het aantal seconden die minimaal moeten zijn verstreken sinds de laatste reload. De maximale waarde is 43200 decimaal (12 uur). Zo kan je ervoor zorgen dat het probleem slechts 1 keer per 12 uur optreed. De enige echte structurele oplossing is om de hele PF tree opnieuw op te bouwen. Dat is echt heel erg lastig in grote omgevingen.&lt;/P&gt;
&lt;P&gt;Omdat de programmeurs niet echt handig zijn omgesprongen met het reloaden van de hierarchie in Exchange 2007 is dit probleem nog in onderzoek bij de productgroep. Hopelijk wordt er een aanpassing gemaakt. Misschien wordt dit zelfs als bug aangeduid. Hoe het ook wil, op dit moment zijn public folders in grote omgevingen dus RUK...&lt;/P&gt;
&lt;P&gt;Van mij mogen ze verdwijnen.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3127264" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/mpriem/archive/tags/Exchange+2007/default.aspx">Exchange 2007</category><category domain="http://blogs.technet.com/mpriem/archive/tags/Bug/default.aspx">Bug</category></item></channel></rss>