system32:huy32.sys - the bsod strikes back

So the huy32.sys was not removed by Nod32 (what was removed then?! More reason to kill this XP installation and install Vista), so I started searching again and found a great post which refers to a nice application that runs very quickly, does two reboots, and provides a report. The report clearly stated it found the huy32.sys and removed it 😊 We shall see if this is the end of the saga...


system:huy32.sys

So my work machine just magically started rebooting recently—great fun. Big project + tight deadlines + all source code on my machine + random blue screens = me losing my mind in panic. Today, I actually read the Blue Screen of Death (BSOD) out of desperation and found an odd line in it:

system:huy32.sys

After a few searches, I found out that this precious little file (which is well hidden thanks to the :) is part of a trojan. YEAH!! Like I don’t have enough to think about.

The current "anti-virus" at work is "Office Scan," which I would have thought would pick it up. I think I know why it didn’t—either the virus definitions aren’t 100% up to date, or maybe it’s just crap.

So, after calling Nic-Nap (the trusty office admin) to get the admin password for Office Scan, I uninstalled it, installed a 30-day trial of NOD32, and rebooted. NOD32 picked it up, deleted it, and the blue screen hasn’t returned… yet.😉

UPDATE: See the follow-up for more information on the return of the BSOD.


Worst product name (really this is even worse than powershell)

Ok, I take it all back. It's not that bad—at least what it’s called is what it promises: a powerful shell. So in PowerShell today, I ran this:

Get-WmiObject -query "SELECT NetConnectionStatus FROM Win32_NetworkAdapter"

The assumption? That PowerShell would connect to WMI (which it did) and return the network connection status. It’s all lies—LIES!!!

I have no idea what it actually returned, but it sure wasn’t the connection status this layman wanted. Instead, it spat out a ton of:

__GENUS : 2
__CLASS : Win32_NetworkAdapter
__SUPERCLASS :
__DYNASTY :
__RELPATH :
__PROPERTY_COUNT : 1
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
NetConnectionStatus :

Follow that up with:

Get-WmiObject 'Win32_NetworkAdapter'

Which does give useful network adapter info—except it leaves out the IP address (and the speed, which is a nice-to-have). Here’s what it did return:

ServiceName   : iBcT0201
MACAddress    : 02:C0:EE:XX:XX:XX
AdapterType   : Ethernet 802.3
DeviceID      : 12
Name          : iBurst Modem Type02-01
NetworkAddresses :
Speed         :

I don’t blame PowerShell for this craziness—I blame WMI. It promises so much in its arguments and delivers something completely different.


CCF with floating windows

CCF comes in pretty much any design you like, thanks to having the source code for the agent desktop available. One of the properties of the applications you add is a "Display Group" property, which allows you to set where you want the application to go. If you leave it blank, it defaults to the first CCF panel it finds. If you fill it in and it matches the name of an existing panel, it will go on that panel (have a look at the out-of-box examples for Workflow, Current Session, and Session Explorer). What is not documented anywhere—updated: it is in the developer guide—is that you can also put in either "floating" or "floatingtool", which will cause the window not to be in the CCF SDI interface (i.e., on the tabs or in some other area) but in its own pop-up window. The "floatingtool" option changes the type of pop-up form to a tool form (i.e., thin header). It is possible to push the boundary on this further by putting in your own terms and then modifying the "AddApplication" method of UIConfiguration.cs to handle those special terms.

An idea I had here is that you could do something like have the window stay on top, align to the right of the window, and have it load a Reporting Services report with graphs on it—nice mini-dashboard!


Worst product name (for developers)

Microsoft PowerShell may be the worst product name for developers. If you write scripts, I’m not classing you as a developer—I’m classing people who understand Assemblies, Namespaces, and Generics as developers for this post. Anyway, if you are a developer, it should be called .NET Object to Text Render (and if Motorola made it, NOTR), since that is what it actually does: it converts .NET objects to text. Once you understand that concept, it gets a lot more powerful than the whole "DIR", "COPY" on a blue background than it appears the first time.

So it understands strings, so this is possible:

PS C:\Documents and Settings\rmaclean> 'sadev'+'.co.za'
sadev.co.za

It also understands ints, so this is also possible:

PS C:\Documents and Settings\rmaclean> 67 * 34 + 9 - 22
2064

And since .NET understands how to translate ints to strings, this becomes possible:

PS C:\Documents and Settings\rmaclean> 'sadev'+'.co.za' + (67 * 34 + 9 - 223) + 999
sadev.co.za2064999

And since objects can have properties, you can start with Get-ChildItem (which is like _DIR_ for the old school in the audience), then add:

| where-object { $_.CreationTime -gt "1/29/2007" }

to get all items created since Jan 29, 2007. Example:

Get-ChildItem | where-object { $_.CreationTime -gt "1/29/2007" }

Then add on | Export-Csv to export the results to a CSV file. Pure madness—I say, pure developer insanity! :D


CCF Wikipedia Entry

There is an entry in Wikipedia for CCF 😊 It is unfortunately very light in content. What spurs me to post about it is not the article itself, but the comments in the history: "(cur) (last) 21:07, 25 September 2006 Jmcnamara (Talk | contribs) (This reads like an ad—and I can’t find anything notable on the web about this except some vague marketing material at Microsoft’s website. I’m an MS booster, but this doesn’t look real.)"

The whole "it doesn’t look real" is bad, and it’s not the first time this has been brought up. Because so few people know of CCF and the website is tiny (compared to others like MSCRM or Dynamics GP, let alone someone like Office), it really does appear to be vaporware, beta, or some other product that does not yet exist. Definitely, the CCF community needs to put more content in public places, but Microsoft also needs to help drive this—even if it’s just with a better website (which links to the forums would also help show real activity with the product).


Agent Desktop: Error: Failed to connect to the web server.

It appears that a few people have had the problem where everything works great in Agent Desktop, but not when selecting a contact to work with, as they get something like:

The underlying connection was closed: The remote name could not be resolved.

Stack:
at Microsoft.Ccf.Csr.Sessions.SetActiveSession(Guid sessionID)
at Microsoft.Ccf.Csr.Sessions.AddSession(String name, Int32 callID, Object customer)
at Microsoft.Ccf.Samples.Csr.AgentDesktop.Desktop.AddSession(CustomerRecord customer, CallClassProvider call)

and/or

Customer Care Framework 2005 - Agent Desktop: Error: Failed to connect to the web server. Please verify that you can connect to the web server.

Well, it would appear from the outside that the SetActiveSession method (at least in the .NET 1.1 QFE 3 version, and likely earlier .NET 1.1 versions) has the server hardcoded (since this is one of the few assemblies where you don’t get the source code, and Reflector wasn’t much help—so I can’t state this for sure). If it is hardcoded, it’s insanity, and hopefully fixed in the .NET 2.0 release.

But if you hit this because your CCF server isn’t named CCFIIS, the simple fix is either:

  1. Add an entry to your DNS server to redirect to that, or
  2. (If you can’t due to security restrictions during development) add it to the hosts file in C:\Windows\System32\Drivers\Etc\.

Once that’s done, restart Agent Desktop and enjoy.


Update: Thanks to MattB on the CCF Forum for confirming it is hardcoded and that a hotfix is available for 1.1 from PSS, while 2.0 is already fixed! 😊


CCF Workflow and Workflow step addition fails with "Unable to update the requested information"

When in the CCF admin console, you may get an "Unable to update the requested information" error when trying to add a new workflow or workflow step (from here, I will just say workflow but mean both). This is because you cannot add a workflow when no others exist. For example, don’t delete the demo ones until you create one of your own.

What’s happening is that the ID field in the table is used in a relationship and thus cannot be an identity field. So the admin tool checks for the highest value, adds one to it, and uses it as the new ID. When there are no items, it fails.

If you need to manually add a workflow (instead of redeploying), it’s in dbo.ContactCenterAIF.WorkflowsMaster, and for workflow steps, it’s in dbo.ContactCenterAIF.WorkflowStepsMaster.


RegisterListener Exception

If you get an exception with the CCF Agent Desktop that involves "RegisterListener", it’s likely because you got a little too confident in your deployment and didn’t follow the deployment guide—like in the past. If you had, you would have installed Microsoft WSE 2.0 SP3 Runtime.msi, which is in the Others folder of the deployment on the desktop before attempting it. So you’re also aware that if this fails, pretty much a ton of other items (menus, status updates, etc.) will also fail.


Why should you promote upgrades

I enquired with my hosting company (Hetzner) about upgrading the amount of disk space—and only disk space. See, I am planning to upload my photos, and they take space—lots of it—and it’s the only thing I’ve come close to using. The bandwidth is great; the amount of email addresses is ridiculous (I only use 2, and they’re both just forwards anyway), and so on.

The options available to me are:

  1. Upgrade, which doubles my disk space
  2. Buy 10 MB more for R5 more.

Here’s the downside for the upgrade: they’re charging me R49 for it. The logic told to me is that they have to manually do the changes to quotas, etc. This, for me, is horribly flawed because:

  1. They have this great, "award-winning" H-Console—which did the entire set of my account changes automatically
  2. They don’t charge for downgrading.

This is really the part that shocks me—I could understand if they only charged for downgrades (penalizing the end user in a way) or charged for both (due to the "manual" work required)—but they don’t. They seem happier to have people downgrade than upgrade, which, in my mind, means they’ll make less money.

Anyway, the other funny part of this story is that if I pay R5 per 10 MB and buy the 100 MB, I’ll end up paying the same amount as if I upgraded—but without the penalty for an upgrade.

I actually think this is a horrible side effect of one of the value propositions Hetzner likes to tell people: "Stable pricing since 1999". The problem with stable pricing is that no one ever goes back and reviews it or applies all those business lessons learned in the last eight years, like getting existing customers to spend more money being easier than getting new customers.

Note: This isn’t an issue about the amount of money but rather the logic behind it.