Tips/Support

  • The Old New Thing

    If you set up roaming profiles, you are expected to set up each machine identically, for the most part

    • 17 Comments

    A customer discovered the following behavior when they set up roaming user profiles on their domain. Consider two machines, 1 and 2. An application A is installed on machine 1, but not machine 2. A user with a roaming profile logs onto machine 1 and pins application A to the taskbar. That user then logs off of machine 1 and logs onto machine 2.

    Now things get interesting: The taskbar on machine 2 initially shows a white icon on the taskbar, representing the nonexistent application A. A short time later, that icon vanishes. When the user logs off of machine 2 and back onto machine 1, the pinned icon is missing on machine 1, too.

    The white icon is deleted automatically by the system because it sees that you pinned an application which is not installed, so it unpins it too. This general rule is to handle the case where you install an application and pin it, then somebody else unninstalls it. The taskbar removes the now-broken icon to reflect the fact that the application is no longer installed. There's no point having a shortcut to a nonexisting program, and it relieves application vendors the impossible task of cleaning up pinned icons upon uninstall. (It's impossible because some users who pinned the application may not have their profile locally present because it roamed to another machine. Or worse, the uninstaller tries to edit a profile that is not active and ends up corrupting the master copy when the two versions reconcile.)

    The user profiles team explained that one of the assumptions behind classic roaming user profiles is that the machines participating in roaming be semantically identical: They must be running the same operating system on the same processor architecture. They must have the same set of applications installed into the same locations. And they must have the same drive letter layout.

    But that's just classical roaming profiles. There are other roaming profile solutions, such as User Experience Virtualization, which may meet the customer's needs better. (I'm told that there are also third-party roaming solutions, though I don't know of any offhand, this not being my area of expertise.)

  • The Old New Thing

    What is the difference between Full Windows Touch Support and Limited Touch Support?

    • 19 Comments

    In the System control panel and in the PC Info section of the PC & Devices section of PC Settings, your device's pen and touch support can be reported in a variety of ways. Here is the matrix:

    No pen Pen
    No touch No Pen or Touch Input Pen Support
    Single touch Single Touch Support Pen and Single Touch Support
    Limited multi-touch Limited Touch Support with N Touch Points Pen and Limited Touch Support with N Touch Points
    Full multi-touch Full Touch Support with N Touch Points Pen and Full Touch Support with N Touch Points

    The meaning of No touch and Single touch are clear, but if a device supports multiple touch points, what makes the system report it as having Limited versus Full touch support?

    A device with Full touch support is one that has passed Touch Hardware Quality Assurance (THQA). You can read about the Windows Touch Test Lab (WTTL) to see some of the requirements for full touch support.

    If you have a touch device without full touch support, then Windows will lower its expectations from the device. For example, it will not use the timestamps on the device packets, and it will increase the tolerances for edge gestures.

    Note that if test signing is enabled, then all multitouch drivers are treated as having full touch support. (This lets you test your driver in Full mode before submitting it to THQA.)

  • The Old New Thing

    File version information does not appear in the property sheet for some files

    • 26 Comments

    A customer reported that file version information does not appear on the Details page of the property sheet which appears when you right-click the file and select Properties. They reported that the problem began in Windows 7.

    The reason that the file version information was not appearing is that the file's extension was .xyz. Older versions of Windows attempted to extract file version information for all files regardless of type. I believe it was Windows Vista that changed this behavior and extracted version information only for known file types for Win32 modules, specifically .cpl, .dll, .exe, .ocx, .rll, and .sys. If the file's extension is not on the list above, then the shell will not sniff for version information.

    If you want to register a file type as eligible for file version extraction, you can add the following registry key:

    HKEY_LOCAL_MACHINE
     \Software
      \Microsoft
        \Windows
          \CurrentVersion
            \PropertySystem
              \PropertyHandlers
                \.XYZ
                 (Default) = REG_SZ:"{66742402-F9B9-11D1-A202-0000F81FEDEE}"
    

    (Thanks in advance for complaining about this change in behavior. This always happens whenever I post in the Tips/Support category about how to deal with a bad situation. Maybe I should stop trying to explain how to deal with bad situations.)

  • The Old New Thing

    Is there a way to disable a specific balloon notification without disabling all of them?

    • 11 Comments

    There is a group policy called Turn off all balloon notifications, but what if you want to turn off only one specific notification?

    The taskbar does not offer fine-grained policy control over balloon notifications. All you have is the giant sledgehammer that turns off all of them. If there is a specific balloon you want to disable, you have to check with the specific program that is raising them, or the specific product feature, to see if it offers a way to turn the balloon off.

    For example, there is a setting to disable the low disk space checks and another one to disable notifications that tell you when you have lost the connection to a networked file and are working on the local copy.

  • The Old New Thing

    Why does the timestamp of a file increase by up to 2 seconds when I copy it to a USB thumb drive?

    • 24 Comments

    We saw some time ago that the FAT file system records timestamps in local time to only two-second resolution. This means that copying a file to a FAT-formatted device (typically a floppy drive or a USB thumb drive) can increase the timestamp by up two seconds. And even after the file is copied, the timestamp is not stable. The timestamp changes depending on the time zone employed by the computer that accesses the drive. In particular, if you are in a part of the world which changes clocks during the summer, then the timestamp on the file moves by an hour every spring and then moves in the opposite direction every autumn. (Because you change time zones twice a year.)

    Okay, but why does the timestamp always increase to the nearest two-second interval? Why not round to the nearest two-second interval? That way, the timestamp change is at most one second.

    Because rounding to the nearest interval means that the file might go backward in time, and that creates its own problems. (Causality can be such a drag.)

    For example, suppose you regularly back up files from your NTFS-formatted C: drive to your USB thumb drive mounted as drive F: by typing

    xcopy /D C:\Files\* F:\Files\*
    

    If the timestamps rounded to the nearest two-second interval, then half the files on average will have a timestamp on the USB thumb drive older than the files on the C: drive. This means that if you perform the command a second time, approximately half of the files will be copied again. To the user, it looks like the xcopy command never finishes the job, because each time you tell it "Perform an incremental backup" it always finds something to copy. It never says, "All files up to date, you can go home now."

    To avoid this infinite loop, the convention is always to round up, so that the copy of a file is never older than the original.

  • The Old New Thing

    Where does the Installed Updates control panel get the install date from?

    • 12 Comments

    A corporate customer wanted to know where the Installed Updates control panel gets the Installed On information from, because they found that the values were always set to the current date regardless of when the update was actually installed.

    The algorithm goes roughly like this:

    First, ask MSI what date the update was installed by calling Msi­Get­PatchInfo­Ex and asking for the INSTALL­PROPERTY_INSTALL­DATE.

    If that doesn't work, then go to the registry key under Software\Microsoft\Windows\Current­Version\Uninstall\Unique­Id and look for a value called (surprise) Install­Date. (Note that 32-bit updates on 64-bit machines will be redirected into a Wow­64­32­Node key.)

    If that still doesn't work, then it's time to guess: Windows XP uses the last-modified date of the directory that contains the uninstaller. Windows Vista and higher use the last-modified date of the Software\Microsoft\Windows\Current­Version\Uninstall\Unique­Id registry key. (Again, possibly with a Wow­64­32­Node stuck in there.)

    Bonus chatter: Interestingly, the customer didn't phrase the problem like that. The customer said, "The first time a user logs on each day, the install date changes to the current date. Subsequent logons the same day do not change the date. But the first logon the next day changes the date again. What's so special about the first logon of each day?" What's so special about the first logon of each day is that it's a new day! I suspect that the the date is updated on every logon. It's just that they don't notice the change because the date is the same.

  • The Old New Thing

    How do I turn off email reminders for my Windows Live calendar, and disable the birthday calendar while I'm at it?

    • 12 Comments

    While having lunch with my colleagues a few days ago, they complained that they get annoying email for all their calendar events.

    I mentioned, "So turn off the email notifications."

    "You can do that?" they replied, incredulous.

    Here's how you do it.

    First, go to calendar.live.com and sign in to your calendar.

    In the upper right corner of the screen, click on the gear icon.

    Sven Svensson
    👨

    From the drop-down menu, select Options. From the Options page, select the calendar you want to change.

    Edit your reminder and calendar settings
      Sven's calendar
      Birthday calendar

    In the Calendar settings, untick the checkboxes.

    Notifications
    Email notifications
    Get reminders for events and tasks
    Get daily agenda

    And then click Save to save your changes.

    My colleagues also noted "It used to mean something when somebody remembered your birthday. But now, everybody gets a notification on your birthday, and you get birthday wishes from random people you haven't talked to in years." Which led to the next complaint, "I just want to turn off the birthday calendar."

    No problem. Go back and click on the gear icon, and instead of selecting Options, look under Filter Calendars and untick the check box next to Birthday calendar.

    If you have a Windows Phone, you can remove it from your phone calendar by opening the Calendar app, opening the appbar, selecting settings, and then unticking the check box next to Birthday calendar.

  • The Old New Thing

    Redirecting the Favorites folder is technically legal, but you wouldn't like it

    • 47 Comments

    A customer liaison asked for assistance in debugging why Internet Explorer frequently stops responding at their customer's site. "We have tried a number of things like clearning the temporary Internet files, disabling add-ons, and resetting Internet Explorer settings. Please let me know if you can provide guidance based on the dump files provided below to indicate what could be causing Internet Explorer to hang here."

    The dump file showed 23 threads, and all of them seemed to be normal, except for one which looked like this:

    ntdll!KiFastSystemCallRet
    ntdll!ZwOpenFile+0xc
    kernel32!BaseDllOpenIniFileOnDisk+0x1ec
    kernel32!BaseDllReadWriteIniFileOnDisk+0x22
    kernel32!BaseDllReadWriteIniFile+0x154
    kernel32!GetPrivateProfileStringW+0x35
    kernel32!GetPrivateProfileSectionNamesW+0x18
    shell32!CPrivateProfile::_GetPrivateProfileAlloc+0x9e
    shell32!CPrivateProfile::GetSectionNames+0xa0
    ieframe!CINIPropSetStg::Load+0x74
    ieframe!CInternetShortcutPropertyStore::_CreateStoreFromFile+0x4e
    ieframe!CInternetShortcutPropertyStore::Load+0x22
    ieframe!CInternetShortcut::LoadFromFileW+0x39
    ieframe!CInternetShortcut::Initialize+0x17
    shell32!InitializeFileHandlerWithFile+0x2d
    shell32!CFileSysItemString::HandlerCreateInstance+0x29a
    shell32!CFileSysItemString::LoadHandler+0x91
    shell32!CFSFolder::_CreatePerInstanceDefExtIcon+0x7d
    shell32!CFSFolder::_CreateDefExtIcon+0xe9
    shell32!CFSFolder::s_GetExtractIcon+0x1b
    shell32!CFSFolder::_BindHandler+0x209
    shell32!CFSFolder::GetUIObjectOf+0x21
    shell32!GetExtractIconW+0x31
    shell32!_GetILIndexFromItem+0x52
    shell32!SHMapPIDLToSystemImageListIndex+0x37
    ieframe!OrderItem_GetSystemImageListIndex+0x187
    ieframe!CSFToolbar::_GetBitmap+0x2f
    ieframe!CSFToolbar::_OnGetDispInfo+0x34
    ieframe!CSFToolbar::_OnNotify+0x8e
    ieframe!CISFBand::_OnNotify+0x2c
    ieframe!CSFToolbar::OnWinEvent+0x89
    ieframe!_FwdWinEvent+0x1d
    ieframe!CBandSite::_SendToToolband+0x44
    ieframe!CInternetToolbar::_OnNotify+0x2e
    ieframe!CInternetToolbar::SizableWndProc+0x223
    user32!InternalCallWinProc+0x23
    user32!UserCallWinProcCheckWow+0x14b
    user32!SendMessageWorker+0x4b7
    user32!SendMessageW+0x7c
    comctl32!CCSendNotify+0xbfb
    comctl32!SendNotifyEx+0x63
    comctl32!CReBar::_WndProc+0x24f
    comctl32!CReBar::s_WndProc+0x2c
    user32!InternalCallWinProc+0x23
    user32!UserCallWinProcCheckWow+0x14b
    user32!CallWindowProcAorW+0x97
    user32!CallWindowProcW+0x1b
    comctl32!CallOriginalWndProc+0x1a
    comctl32!CallNextSubclassProc+0x3d
    comctl32!DefSubclassProc+0x46
    ieframe!CInternetToolbar::CITBandSite::s_RebarSubclassWndProc+0x5a
    comctl32!CallNextSubclassProc+0x3d
    comctl32!MasterSubclassProc+0x54
    user32!InternalCallWinProc+0x23
    user32!UserCallWinProcCheckWow+0x14b
    user32!SendMessageWorker+0x4b7
    user32!SendMessageW+0x7c
    comctl32!CCSendNotify+0xbfb
    comctl32!CToolbar::TBGetItem+0x2c
    comctl32!CToolbar::DrawButton+0x5e9
    comctl32!CToolbar::DrawToolbarH+0x1ad
    comctl32!CToolbar::TBPaintImpl+0xd5
    comctl32!CToolbar::TBPaint+0x18c
    comctl32!CToolbar::ToolbarWndProc+0xd2e
    comctl32!CToolbar::s_ToolbarWndProc+0x9b
    user32!InternalCallWinProc+0x23
    user32!UserCallWinProcCheckWow+0x14b
    user32!CallWindowProcAorW+0x97
    user32!CallWindowProcW+0x1b
    comctl32!CallOriginalWndProc+0x1a
    comctl32!CallNextSubclassProc+0x3d
    comctl32!DefSubclassProc+0x46
    ieframe!CSFToolbar::_DefWindowProc+0xb8
    ieframe!CISFBand::_DefWindowProc+0x75
    ieframe!CNotifySubclassWndProc::s_SubclassWndProc+0xb4
    comctl32!CallNextSubclassProc+0x3d
    comctl32!MasterSubclassProc+0x54
    user32!InternalCallWinProc+0x23
    user32!UserCallWinProcCheckWow+0x14b
    user32!DispatchClientMessage+0xda
    user32!__fnDWORD+0x24
    ntdll!KiUserCallbackDispatcher+0x2e
    user32!NtUserDispatchMessage+0xc
    user32!DispatchMessageWorker+0x38c
    user32!DispatchMessageW+0xf
    ieframe!CTabWindow::_TabWindowThreadProc+0x280
    kernel32!BaseThreadInitThunk+0xe
    ntdll!__RtlUserThreadStart+0x23
    ntdll!_RtlUserThreadStart+0x1b
    

    (Remember, you can get symbols for operating system binaries.)

    General debugging tip: If you see a really huge stack, that's a good sign that something interesting is going on. Boring stacks tend to be small.

    Furthermore, frames near the bottom of the stack tend to describe what the purpose of the thread is, whereas frames near the top of the stack tend to describe what the thread is actually doing right now. (Exercise: Why?)

    In this case, we see a stack that was probably created to manage a tab window (CTab­Window::_Tab­Window­Thread­Proc) and it's currently stuck in an I/O operation. You can then look at the file name to see what file is stuck.

    0:001> du 04cd6aac
    04cd6aac "\\server\share\abcdefg\Favorites\Mail.url"
    

    It looks like this user stored their Favorites on a network share that is not responding.

    The customer liaison replied,

    Thanks a lot for this information. Can you help me understand how do we tell that the dump indicates this file I/O is causing IE to hang? Having this information would help me better explain this to the customer.

    I wasn't sure how to respond to this. If you see a function with the words File and one of Open, Read, or Write in its name, there's a good chance that it opens, reads, or writes a file. You probably want to look to see what file is being opened, read from, or written to, because that may give a clue why the I/O operation is stuck.

    It turns out that this customer redirected the user's Favorites to a network location. The Internet Explorer folks tell me that this is not an explicitly supported scenario in the sense that they did not do any tuning to make this scenario work well, and frequent hangs are consequently not unexpected. If you redirect the Favorites to a network location, then you get what you get. And if that server frequently becomes unavailable, then what you get often sucks.

  • The Old New Thing

    What is the default size of the Recycle Bin, and how can an administrator control the size of the Recycle Bin?

    • 13 Comments

    A customer was setting up a file server to which they intended to redirect all their employees' documents. They were concerned about the amount of disk space used by all the Recycle Bins on that server.

    Is there a fixed default size for the Recycle Bin, or is it based on the size of the disk? Is there a way we can change the default size for the Recycle Bin?

    The customer is concerned that a user with a small quota on a large drive may end up filling their quota with Recycle Bin content and have no space left for their documents. For example, suppose you have a 1TB drive and each user has a 15 GB quota. If the Recycle Bin were based on disk size, and the Recycle Bin were set to use five percent of the disk, then that would give each user 5% × 1 TB = 51.2 GB of Recycle Bin, which is larger than their quota. Users can fill their Recycle Bin and have no room for documents!

    Fortunately, it doesn't work that way. The Recycle Bin calculations are always based on the disk quota, not the disk size. In the above example, each user's Recycle Bin would be 5% × 15 GB = 768 MB.

    Now as to what the default is, that's a trickier question.

    Up through Windows XP, the default Recycle Bin was ten percent of the user's quota on the underlying volume. Starting in Windows Vista, the algorithm was tweaked, and the default size is ten percent of the first 40 GB of quota, and five percent of any quota above 40 GB. (Note that future versions of Windows may tweak the defaults. This is provided for informational purposes, not contractual.)

    If you don't like the default, you can set an explicit maximum value by policy. If you are willing to live a little dangerously, you can dig under the covers and tweak values on a per-folder basis. Note that once you dig under the covers, you are in unsupported territory, so if it stops working (or starts misbehaving), then you're on your own.

  • The Old New Thing

    Getting past the question to solving the problem, episode 2014.06.25

    • 28 Comments

    Today is another example where the right thing to do is not to answer the customer's question but rather to solve the customer's problem.

    A customer liaison asked, "What do the registry keys X and Y do? We noticed that they are both read from and written to when you open a common file dialog. Just curious."

    I replied, "I'm curious as to your curiousity. I'm afraid that you are curious because your customer is curious, and then the customer will start relying on the keys in a strange and unsupported way." The format of those keys has varied from one version of Windows to another, so there is nothing there applications can rely on. But maybe we can figure out why the customer is snooping there so we can solve the customer's problem.

    The customer liaison was kind enough to explain. "The customer wants to know how to set the default folder shown in the Open and Save As dialogs."

    The algorithm for choosing the default folder shown in the Open and Save As dialogs is spelled out in the documentation of the OPEN­FILE­NAME structure. There is no registry key that can force all dialogs to use a particular folder. But what is the customer's actual problem?

    The customer liaison explained, "The customer wants to change the default save location for Paint and Notepad."

    Okay, now we're getting closer to a solvable problem. Paint defaults to saving in the user's Pictures folder, and Notepad defaults to saving in the user's Documents folder, so you can use folder redirection to point the Pictures and Documents folders to locations of your choosing, noting of course that this will affect all applications which look for those folders.

    It turns out that this was what the customer actually needed. They redirected the user's Pictures and Documents folders to their preferred location via GPO, and everybody was happy.

Page 2 of 26 (257 items) 12345»