Friday, August 17, 2007

WikiScanner can track anonymous Wikipedia edits

WikiScanner or Wikipedia Scanner provides an online searchable tool that takes a database dump from Wikipedia and crawls through anonymous edits which were made from source IP addresses that can be traced back to organizations who may have a vested interest in the content of the respective Wikipedia pages. It uses a IP2Location database to connect IP addresses with organizations.

In most cases these were edits where the organizations would have removed content with criticism. The homepage lists the following organizations as editor's picks on its homepage.

  1. Government
    1. U.S. Senate Sergeant At Arms
    2. U.S. House Of Representatives
    3. Environmental Protection Agency
    4. National Institute of Health
    5. Democratic Party
    6. Republican Party
    7. NATO
  2. Education
    1. California Institute of Technology
    2. Bob Jones University
  3. Policy
    1. Electronic Frontier Foundation
    2. The Rand Corporation
    3. National Rifle Association
    4. American Civil Liberties Union
  4. Corporate
    1. Diebold Inc
    2. Amgen Inc
    3. Pfizer Inc
    4. Wal-Mart Stores Inc
    5. ExxonMobil
    6. Raytheon
  5. News
    1. Washington Post
    2. Washington Times
    3. Fox News Channel
    4. New York Times Company
    5. Al-Jazeera
  6. Locations
    1. Ft. George G Meade, Maryland
    2. Havana, Ciudad De La Habana
  7. Misc
    1. darpa.mil
    2. Central Intelligence Agency
    3. Church of Scientology
    4. Vatican
    5. Christian Science Publishing Society
    6. Church of Latter Day Saints

The creator, Virgil Griffith, wrote in the FAQ page that he created WikiScanner "to create a fireworks display of public relations disasters in which everyone brings their own fireworks, and enjoys". He however suggests that a tool like WikiScanner is not necessary and anonymous speech should be preserved.

The Wired wrote See Who's Editing Wikipedia - Diebold, the CIA, a Campaign to break the story. 

The online tool is available here.

Compact disc hits 25th birthday

The world's first compact disc (CD) was produced by Philips and Sony 25 years ago, revolutionizing the music industry and becoming a dominant format. CDs have sold over 200 billion units worldwide and are still popular despite digital downloads' growth. The CD's development involved overcoming technical challenges, and it was initially aimed at holding an hour of audio but extended to 74 minutes for a complete symphony. Although CD sales have declined in recent years, they remain a significant format, cherished by some music enthusiasts. Here is an article from BBC News on the compact disc turning 25.

Monday, August 13, 2007

Google Shutting Down Google Video

Google is shutting down its premium video service, leaving users who purchased or rented content unable to access their videos in the future. They won't receive refunds but are offered a $5 credit on Google Checkout, expiring in 60 days. The move comes after Google's acquisition of YouTube on October 9, 2006, making Google Video less relevant. Analysts criticize the decision, as users lose access to content they bought despite functioning players. Google originally launched this video hosting service on January 25, 2005. The BBC reports it here.

Monday, July 9, 2007

Yahoo.com is Asia's Most Popular Website

Yahoo.com is not only the most popular web site in the US but also the top choice in Asia, leading in markets like Japan, India, Taiwan, Hong Kong, Malaysia, and Singapore. Microsoft and Google follow as the second and third most popular sites in the region, respectively. US web companies are investing more in Asia to tap into the region's rapidly growing economies like China and India. However, internet usage in Asia lags behind the global average, with South Korea having the highest rate at 65% and India and China at the bottom with 3% and 9%, respectively. Yahoo operates in China and Japan through partnerships with local companies. The Financial Express writes Yahoo.com is Asia’s favorite website here.

Wednesday, May 23, 2007

Google buying FeedBurner for $100 million

In this context, it is essential to recognize that the aggregation of personal preferences and browsing history of ordinary users is consolidating within the databases of a single company. This aggregation enables the correlation and analysis of vast amounts of private information. While this information is already scattered across the internet, the concern arises from its gradual centralization under the control of a single private entity. The potential consequences for our personal and private data in relation to our browsing experiences are a matter of concern.

One notable outcome of this centralization is the potential for the company to offer more integrated, personalized, and localized services to its users. This aspect is particularly intriguing in the current landscape of internet search dominated by companies like Google.

Wired writes Google To Drop $100 Million On Feedburner here. BetaNews reports Google to Acquire Feedburner for $100 Million here.

Friday, May 18, 2007

Can Google and Linux Topple Microsoft?

The Federal Aviation Administration's CIO, David Bowen, is considering replacing Microsoft Windows and Office with Linux and Google Apps Premium for cost and compatibility reasons. Google Apps offers collaborative tools, but not all functionalities of Microsoft Office. Concerns exist over data security with third-party servers. Microsoft argues that costs are not solely dependent on software and addresses compatibility issues. The FAA has not made a final decision yet. Here is an article from Route-Fifty.

Wednesday, May 16, 2007

Amazon to offer DRM-free music downloads

Great news awaits music enthusiasts worldwide, and it is expected to be warmly embraced. The current Digital Rights Management (DRM) policies governing the usage and distribution of music files are characterized by unjust and unfriendly restrictions that neglect the rights of purchasers or consumers. It is evident that such DRM policies were inherently doomed to fail indefinitely. When a customer acquires a piece of music in digital format, it is illogical to impose restrictions on the number of digital devices on which it can be transferred. The recent shift away from these restrictive policies is a positive development. It is hoped that the legal music industry will witness a substantial increase in sales as a result, minimizing losses to pirated content providers. Here is a ZDnet article.

Wednesday, May 2, 2007

Yahoo! Messenger is now available inside Web Browsers

This development brings positive implications for Yahoo Messenger users as it eliminates the need to install an additional application on their local machines. This enhancement greatly enhances convenience, especially for individuals who frequently utilize the application from cyber cafes, a common practice in India where a significant proportion of internet users access the web from such establishments. Notably, Yahoo holds the second position globally in the Instant Messaging (IM) space, boasting 88.5 million users according to audience measurement firm comScore Inc. However, it is worth mentioning that AOL's AIM holds the top spot in the United States, while Microsoft's MSN/Windows Live Messenger remains the most popular globally. Here is an article on Reuters.

Tuesday, April 24, 2007

Google Surpasses Microsoft as the World's Most Valuable Brands

Google has surpassed Microsoft as the world's top-ranked brand, with General Electric, Coca-Cola, and others following. Factors like corporate responsibility and expansion into emerging markets contributed to brand recognition. China Mobile topped the list for non-U.S. brands. The rankings were based on financial data and interviews with a million consumers. Google's rise highlights its word-of-mouth promotion approach, while Microsoft slid despite a massive marketing campaign for Windows Vista. Apple and Starbucks saw significant improvements, while Intel, Home Depot, and Dell declined in the brand rankings. A Reuters article is available here.


Tuesday, April 17, 2007

Call to WTSQueryUserToken() gives ERROR_PRIVILEGE_NOT_HELD in Windows Vista

2007-04-17 Here I will describe an error called ERROR_PRIVILEGE_NOT_HELD that I faced from a call to WTSQueryUserToken() using Visual C++ on Windows Vista and Windows XP SP2.

I have used the WTSQueryUserToken() function to obtain the primary access token of the logged-on user whose session-id I had obtained from a call to WTSGetActiveConsoleSessionId().

Now, here is my problem. After the call to WTSQueryUserToken() from inside a DLL that is running under the Print Spooler service, GetLastError() returns error number 1314 which means: A required privilege is not held by the client. I am logged in to Windows using an administrator account. The Notepad.exe application that is invoked at the end of the code also doesn't start.

In MSDN I see that what I'm getting is the error ERROR_PRIVILEGE_NOT_HELD which means: The caller does not have the SE_TCB_NAME privilege. How should I go about getting that privilege now?

Print Spooler (SPOOLSV.EXE) runs under the SYSTEM username account, i.e., the LocalSystem account. A quick look up in the Windows Task Manager shows that the Image Name SPOOLSV.EXE is running under the SYSTEM username.

My DLL is loaded by SPOOLSV.EXE under its own context. My intent is to start the Notepad.exe application under the context of the user who is currently logged in to Windows.

Note: As an aside, note that the SPOOLSV.EXE runs from location C:\WINDOWS\system32\spoolsv.exe. It is the Windows Print Spooler service that loads files to memory for later printing.

Here is my source code snippet:

static STARTUPINFO si;
static PROCESS_INFORMATION pi;
HANDLE hTokenNew = NULL, hTokenDup = NULL;

DWORD dwSessionId = WTSGetActiveConsoleSessionId();

WTSQueryUserToken(dwSessionId, &hTokenNew);

DuplicateTokenEx(hTokenNew, MAXIMUM_ALLOWED, NULL,
                 SecurityIdentification, TokenPrimary,
&hTokenDup);

ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = _T("winsta0\\default");

LPVOID  pEnv = NULL;
DWORD dwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;

CreateEnvironmentBlock(&pEnv, hTokenDup, FALSE));

dwCreationFlag |= CREATE_UNICODE_ENVIRONMENT;

pEnv = NULL;

ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));

CreateProcessAsUser(hTokenDup, NULL, _T("c:\\windows\\notepad.exe"),
                    NULL, NULL, FALSE, dwCreationFlag,
                    pEnv, NULL, &si, &pi);

CloseHandle(hTokenDup);


Update 2007-04-25: So, this is how I solved it. There was no need for the WTSGetActiveConsoleSessionId() and WTSQueryUserToken(). Just the CreateEnvironmentBlock() must work properly so that the environment for the process you are going to create is set correctly.

Here is the source that worked for me. The code snippet below shows the Notepad application being launched. The DLL in which I used this code runs under the Print Spooler service - basically it is a Print Monitor. You need to add your own validity checks - what's listed below is bare-bones.

#include "userenv.h"
// Global Typedefs for function pointers in USERENV.DLL
typedef BOOL (STDMETHODCALLTYPE FAR * LPFNCREATEENVIRONMENTBLOCK)
             (LPVOID  *lpEnvironment,
              HANDLE  hToken,
              BOOL    bInherit);
typedef BOOL (STDMETHODCALLTYPE FAR * LPFNDESTROYENVIRONMENTBLOCK)
             (LPVOID lpEnvironment);

void InvokeApp()
{
    // Local Variable Declarations
    HANDLE hToken    = NULL;
    HANDLE hTokenDup = NULL;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(STARTUPINFO));
    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
   
    si.cb = sizeof(STARTUPINFO);
    si.lpDesktop = _T("Winsta0\\Default");
   
    DWORD  dwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;
    LPVOID pEnvironment = NULL;
    LPFNCREATEENVIRONMENTBLOCK lpfnCreateEnvironmentBlock = NULL;
    LPFNDESTROYENVIRONMENTBLOCK lpfnDestroyEnvironmentBlock = NULL;
    HMODULE hUserEnvLib = NULL;
    hUserEnvLib = LoadLibrary(_T("userenv.dll"));
    if ( NULL != hUserEnvLib ) {
        lpfnCreateEnvironmentBlock = (LPFNCREATEENVIRONMENTBLOCK)
        GetProcAddress(hUserEnvLib, "CreateEnvironmentBlock");
       
        lpfnDestroyEnvironmentBlock = (LPFNDESTROYENVIRONMENTBLOCK)
        GetProcAddress(hUserEnvLib, "DestroyEnvironmentBlock");
    }

    OpenThreadToken(GetCurrentThread(), TOKEN_DUPLICATE, TRUE, &hToken);
    DuplicateTokenEx(hToken,
                     TOKEN_IMPERSONATE|TOKEN_READ|
                     TOKEN_ASSIGN_PRIMARY|TOKEN_DUPLICATE,
                     NULL,
                     SecurityImpersonation,
                     TokenPrimary,
                     &hTokenDup);
    RevertToSelf();
    CloseHandle(hToken);

    if (NULL != lpfnCreateEnvironmentBlock)
{
        if (lpfnCreateEnvironmentBlock(&pEnvironment, hTokenDup, FALSE))
{
            dwCreationFlag |= CREATE_UNICODE_ENVIRONMENT; // must specify
        }
        else
{
            pEnvironment = NULL;
            OutputDebugString(_T("CreateEnvironmentBlock() -- FAILED"));
        }
    }
    else
{
        OutputDebugString(_T("FAILED - GetProcAddress"));
    }

    CreateProcessAsUser(hTokenDup, NULL, _T("c:\\windows\\notepad.exe"),
                        NULL, NULL, FALSE, dwCreationFlag,
                        pEnvironment, NULL, &si, &pi);
   
    if (NULL != lpfnDestroyEnvironmentBlock)
        lpfnDestroyEnvironmentBlock(pEnvironment);
 
    if (NULL != hUserEnvLib)
        FreeLibrary(hUserEnvLib);
   
    CloseHandle(hTokenDup);
}

What did I fix? The issue I was facing was that the application I wanted my Print Monitor to launch using CreateProcessAsUser() was not getting the logged-on user's environment. The after-effect was that, because of this reason, when my application used to show the File Open common dialog box, it would behave strange while trying to browse to the Desktop in it. This was in Vista.

In Windows XP, the File Open dialog would let you browse to the Desktop folder but the object icons on the Desktop would not appear right in it.

Note that if you don't use CreateEnvironmentBlock(), and the application you launch uses things like the Windows Common Dialog boxes, you may find file dialog boxes working erratically.

Refer this and this.

Saturday, April 14, 2007

Google pays $3.1bn for DoubleClick

Google acquired DoubleClick, a pioneer in online advertising, for $3.1 billion in cash, making Google a major player in online display advertising. Despite DoubleClick's revenues being estimated at $300m-$400m, the high price reflects intense competition in the online advertising market. Google aims to cross-sell DoubleClick's services to its existing search advertising customers. The deal allows Google to expand its advertising market as its core search advertising business slows down. The integration of search and display advertising is a significant benefit of the acquisition. DoubleClick's private equity owners profit handsomely from the sale. Here is an article from the Financial Times.

Monday, February 12, 2007

Can the Windows.old folder be deleted from Windows Vista?

I just did my update to Windows Vista RC2 build 5744 and because it was an update and not a clean install it created a "Windows.old" directory. Well, this folder is over 7 Gigs, and I can't really spare that much room for nothing. So, can I delete this folder and not cause any problems with my current Windows?

Solution: Yes, you can. If you want to remove that Windows.old folder from of your Windows Vista installation root drive, go to

Start > All Programs > Accessories > System Tools > Disk Cleanup

In "Which files to clean up" dialog > Click on "Files from all users on this computer".

Select the Drive where your Windows.old resides.

In Disk Cleanup dialog, select Previous Windows installation(s) in the "Files to delete" list. Click on OK.

This should clean up the hard disk space occupied by the Windows.old folder.

I verified this on Windows Vista x64.

Refer this.