Great free utility to recover deleted files in Windows

October 18, 2008

A few weeks ago I got into the mood of cleaning up my PC from unwanted files/folder and unused applications. I started deleting all the junk data that I didn’t need. But then something fell down from the sky, my mind got confused and I deleted a folder containing hundreds of pictures of my son. That was THE Oh My Good moment.

As soon as I realized what had happened, I kept sitting there, thinking what my wife will do to me when she gets to know. I had to do something and quickly.


As I used Shift-Delete to delete the files and folder, I knew there will be nothing for me in the Recycle Bin folder. My only choice was to get hold off some software which could read the hard disk sectors where those files were before they were deleted.

Note: If you delete files from your computer, Windows does not actually remove data from the hard disk; it just deletes the links to those files from the File Allocation Table and marks those areas as available for future use. Which means, a new file can be given the space where a contents of a deleted file are located. Do not perform any installation or copy new files on the disk where the files were deleted. Doing so will give the OS a chance to overwrite those sectors of the disk with new contents

I started to look for some utility. Most of them were available as trial version and they did not recover the files. Though they showed a list of some of the deleted picture files. But I was not satisfied with their functionality in the evaluation mode. I would have bought the first software if it had worked.

I looked further and found Undelete Plus from The tool worked like a charm and I got my files back. And yeah, it was free.

Undelete Plus

Undelete Plus in action!!!


Security with Windows Data Execution Prevention (DEP)

October 18, 2008

Data Execution Prevention protects a system (e.g. Windows XP SP2 or later) by disabling code execution from data pages. Most of the malicious programs like viruses, spyware etc use buffer overrun flaws in programs to inject and execute their own code. Malicious programs copy executable code into data memory and manipulate the program counter to start executing that code. DEP uses Hardware support (in the CPU) and some software based techniques to prevent code execution from stack and heap memory as both are supposed to store only data.

When an application is launched, OS allocates it a Virtual Address Space (VAS) consisting of memory pages. Each of the pages in a VAS are marked either as code or data. Size of each page depends on the processor. Hardware DEP monitors if a program tries to execute instructions from pages that are marked as data only page. Whenever this happens the CPU generates an exception which is handled by the OS which in turn terminates the offending application.

Intel x86 based processors provide XD bit (Execute Disable bit) for operating systems to implement hardware DEP. AMD has similar bit named NX bit (No Execute bit).

Software-enforced DEP is another form for protection implemented in software (as in Windows XP SP2). It doesn’t need NX bit support in the CPU. This mechanism only provide protection from malicious code which uses flaws in Structured Exception Handling support available in the Windows OS.

To explore and play with DEP settings on your Windows system, go to Start -> Settings -> Control Panel -> System -> System Properties -> Advanced Tab -> (Performance) Settings -> Data Execution Prevention.

Data Execution Prevention screen on Windows XP SP2

Data Execution Prevention screen on Windows XP SP2

Have safe computing!

A note on Operating Systems

October 18, 2008

An Operating System manages computer’s resources to provide a controlled environment where user applications perform their activities, without (hopefully) interfering in each others operations. Resources include CPU Processing time, Memory and computer peripherals. Operating systems are complicated software which makes it possible for normal people to easily use computers.

One of the main reasons for widespread usage of computers in recent times is the availability of wide range of applications that run on them. All these useful applications uses the platform provided by the operating system. Developer don’t need to completely understand the hardware organization of the computer on which their applications run. Writing applications in the absence of operating system would be a very cumbersome task.

I believe MS DOS has done more to spread computing than any other operating system. It was a simple OS to use and develop upon. This was probably its biggest strengths. Microsoft used its success to move the masses to their Windows line of Operating Systems. Linux is one another OS which has become quite famous since 1991 when Linus Torvalds released it to general public for free! But before all these, Unix had established its self as a model for modern operating systems.

Core component of an operating system is called Kernel. Kernel gels together different parts of an OS, effectively managing the resources like CPU, memory and Input/Output (IO) devices. A well designed kernel provides fault-tolerence, security and deterministic (real time) properties to a computer system.

From Programming to Software Development

October 18, 2008

If writing software is your profession then you will know that its not one of the easiest ones. To come up with a good software product requires knowledge much more than what is given in the form of requirement specs. A developer can instruct a computer to perform his/her commands with code, but how well that code is written turns out to be altogether different story. But still its nice feeling to see how our code affects lives of other people.

Writing code is just one of the tasks in software development process. There are differences in being a Software Developer or a Programmer. A programmer only implements what has been asked and is knowledgeable about the programming languages. On the other hand, a software developer requires multiple software engineering skills and can think and influence the architecture of the solution. Programming is just one of those skills.

Computers have become quite common in recent times. There are millions of programmers doing coding for problems in different domains. Ada Lovelace is considered as the first programmer writing code for Charles Babbage’s analytical engine. That was in 1842! She did write the code for algorithms but could never execute them. With all the technology with us, we can certainly do better, by not merely thinking about the what to write. A good developer just doesn’t know the best solution but is capable of selecting the best one out of multiple solutions.