Quick Solution: Install LockHunter, then right click on the file/folder/drive and choose "What's locking this ...?"
Native Method: Windows (10 at least, AFAIK) creates an entry in the event log when you try to eject a removable drive and you cannot because a process has a lock on it. The two Event IDs 225 will show the process ID and the name of the process responsible for the lock.
Step by step:
Start the event viewer
Open up "Windows Logs" then "System"
Right click on "System" and choose "Filter Current Log"
In the dialog that comes up, enter "225" (without quotes) where it says "All Event IDs"
You will then see all events related to unable to eject because a process locked the drive.
Look at the timestamps on all these entries and find out which ones relate to the actual time when you tried to eject the drive.
Take appropriate action. Ending a task gracefully (closing the program that has the lock) is OK most of the time. Stopping the Windows Search service is also ok. Stopping an antivirus scan should be ok (if you don't suspect you have any viruses at the time). Going into the task manager and killing the process might not be ok. How to deal with this is beyond the scope of this question.
(Save the view...) in Actions panel (in the right frame) you could "Save Filter to Custom View..." so you'll find it in "Custom Views" (in the left frame above the "Windows Logs")
Process ID:
Process Name:
- If you don't have another entry with a process name, the System process (process id 4) is holding your drive. To get around this one you will have to go to disk management and put the drive you want to eject offline. If the file is on your boot drive, you can't put it offline. In this case, see the note below:
UPDATE 2018: I've seen applications such as WhatsApp Desktop keeping handles on Chrome Canary via the System Process. Since you cannot eject the boot disk (beacuse it is in use), the solution was to use another nifty Sysinternals utility, called Handle. After you close the program which has the locked file, launch handle and run (as an example) handle64 "Chrome SxS\Application\chrome.exe"
to see if the handles are still present on the file that has the PID 4 lock. Via trial and error, close each program running, until there are no more handles on the locked file.
UPDATE 2022: Microsoft's handy PowerToys now includes an extension to check which process is locking a file/folder. It is called File Locksmith and it is a free download. Although you can customize which PowerToy feature you want to enable, if this is the only one you will use, it's an overkill. Better to use a dedicated tool for the job.
Paid option (also works great)
Download and run SafelyRemove, by the same people who make LockHunter. I am not sure why they charge for SafelyRemove when their free LockHunter already does the job. But it helps you eject the drive and if it can't do it, it displays which processes have a lock on it: