Catching revoked Product Keys

In my normal processing of monitoring the product key for each installation, I would like to determine if the product key has been revoked. Besides IsGenuine(), how can I do this?

IsGenuine() is the only method to check if the product key has been revoked (on the client side). Are you talking about using the LimeLM web API? You can check if a product key is revoked by calling the limelm.pkey.getDetails function.

I wasn't planning to use the web APIs. You mention somewhere to limit the usage of IsGenuine to every three months or so. I am using the licensing to protect Windows kernel device drivers. Revalidation takes place every 24 hours or every reboot, which ever comes first.Is it unreasonable to check if the license has been revoked?Also, if your concern of frequently calling IsGenuine because (I assume) it is expensive for your servers, isn't the web API going to be costly too?

Thx,John

Hey John,

I only mentioned the web API because I wasn't sure if you were checking from your webservers. But it sounds like you're checking from the end-user side, in which case you must use IsGenuine.

The problem isn't that it's expensive with our servers. The problem is that not everyone has flawless internet connections. For instance, let's say your service checks if it's genuine on the customer's machine and their internet is down -- what happens? Do you punish the user because they have flaky internet (that is, IsGenuine returns TA_E_INET)?

I think checking every 24hours (or every restart) is a bit drastic. Checking every week is more reasonable. Sure, if you revoke a product key the revocation won't be immediate, but at most they get a few days of extra usage. Checking once a month is my recommendation. My main concern is that you must consider end-user experience. For instance, let's say their internet is down for whatever reason (lightning storm, natural disaster, bob from accounting tripped over the ethernet cords), and they restart their computers. The last thing you want to do is compound their problem by disabling your app because it can't connect to the internet.

Also you need to consider cases where users are explicitly blocking the internet connection (either just to wyday or for your whole kernel driver). So your calls to IsGenuine must be prepared to gracefully back off until some hard limit is reached. So let's say you've reached the time of month to call IsGenuine and it fails to contact wyday. Instead of disabling your app immediately, notify the user that they need to unblock the internet to your app, and try again every day for the next week. If the connection still fails after a week of retrying, then disable your app and notify the user.

Of course there are reasons to check sooner. For instance, let's say you have a feature value that contains some date like update_expires. If the date in update_expires has been reached you might want to call IsGenuine to check if their is new feature data to download.

Does this make sense?