Click here to Skip to main content
15,891,529 members
Articles / Programming Languages / C++
Article

Checking the serial Number of a CD

Rate me:
Please Sign up or sign in to vote.
2.60/5 (5 votes)
26 Dec 2001 234.2K   2.1K   35   46
This program pops up a message box if the installation CD is not in the CD Drive by checking the serial number of the CD.

Introduction

This program checks the serial number of a CD-ROM and refuses to work if the installation CD is not in the CD Drive. This program assumes that at the Time of installation the serial number of the installation CD is stored at the registry location HKEY_LOCAL_MACHINE\Software\CDsoft\Cds. We can achieve this by adding the below code to our installation program.

GetVolumeInformation(drive,
                     vol,
                     sizeof(vol),
                     &sno,
                     &mf,
                     &sf,
                     NULL,NULL);
RegCreateKeyEx (HKEY_LOCAL_MACHINE, "Software\\CDsoft", 0, 
                NULL,REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY | KEY_ALL_ACCESS, 
                NULL, &childkey, &dispos) ;
RegSetValueEx ( childkey, "Cds", 0, REG_DWORD, ( const BYTE* )(LPDWORD) &sno, size) ;
RegCloseKey ( childkey );

In the OnInitDialog function ,we read the serial number of installation CD from registry by using the code below. And we also start a timer.

HKEY hkeyresult ;
DWORD size=sizeof(DWORD) ;
DWORD type;
BYTE  sno[100];

RegOpenKey ( HKEY_LOCAL_MACHINE, ( LPCTSTR ) "Software\\CDsoft", &hkeyresult );
RegQueryValueEx ( hkeyresult, ( LPCTSTR )"Cds" , 0,&type, sno,&size);
RegCloseKey ( hkeyresult );
serialnoCD=*(DWORD *)sno;

SetTimer(NULL,1000,NULL);

In this program OnTimer calls the function check every second. If the CD is not present in the Drive, this function displays a MessageBox. The function for checking the serial number of a CD-ROM is given below...

void CCDcheckDlg::Check() 
{
    char dbits[100],drive[100];
    int i=0;
    
    DWORD d=GetLogicalDriveStrings(100, dbits);
    strncpy(drive,dbits+i,4);
    
    for (int nDrives = 0; nDrives < 26; nDrives ++)
    {
        if(GetDriveType(drive)==DRIVE_CDROM)
            break;    
        i+=4;
        strncpy(drive,dbits+i,4);
    }

    char vol[40];        
    DWORD mf;            
    DWORD sf,sno;    
    GetVolumeInformation(drive,
                         vol,
                         sizeof(vol),
                         &sno,
                         &mf,
                         &sf,
                         NULL,NULL);

    int ret;
    
    //serialnoCD is the serial number of installation CD..
    if (sno!=serialnoCD){
        ret=MessageBox("To use this software CD Must be in the drive",
                       "Sorry", MB_RETRYCANCEL|MB_ICONERROR|MB_APPLMODAL);    
    }
}

This is only an idea and I don't know much about pirating software. I heard that the serial number is unique for all CD's and it can't be changed but I don't know that is true or false. Anyway I think this method can be useful to reduce or lower piracy. What do you think?

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralSolution: Pin
Gilad Novik30-Dec-01 1:13
Gilad Novik30-Dec-01 1:13 
GeneralRe: Solution: Pin
peterchen2-Jan-02 9:14
peterchen2-Jan-02 9:14 
GeneralJust a few remarks... Pin
Nemanja Trifunovic27-Dec-01 17:24
Nemanja Trifunovic27-Dec-01 17:24 
GeneralRe: Just a few remarks... Pin
27-Dec-01 22:42
suss27-Dec-01 22:42 
GeneralRe: Just a few remarks... Pin
28-Dec-01 13:41
suss28-Dec-01 13:41 
GeneralRe: Just a REAL few remarks... Pin
28-Dec-01 23:21
suss28-Dec-01 23:21 
GeneralRe: Just a REAL few remarks... Pin
2-Jan-02 14:51
suss2-Jan-02 14:51 
GeneralRe: Just a few remarks... Pin
Anonymous28-Oct-02 4:03
Anonymous28-Oct-02 4:03 
I couldn't agree more. However, I do not believe in 'free' software. IMHO, there should be a separation between 'free' software and 'open source' software. In certain cases, the second option might be the only way to create stable software ... On the other hand: if anyone is allowed to see the sourcecode of your application, what about your intellectual property rights ???
Creating copy protections on CD's is overruled. Anything they create gets cracked before final release. I think (network)licensing schemes (as FlexLM) are the future. If you use public key encryption on your licensing files, it is very difficult to hack these. Also: NEVER store data straight into the registry of into a file: use hashvalues if the data should only be compared, or PKE otherwise.

Breezer

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.