Ставите https://msdn.microsoft.com/en-us/library/windows/h... и смотрите появляется в списке устройство или нет. Если нет - проблема в железе (или корявые дрова для хост-контроллеров и хабов, но это маловероятно). Если появляются - наверняка софтовая проблема где-то в винде.
Невозможно в общем случае: если в 7-ке не будет нужных API никакая автоматика не поможет. Если программа использует жестко зашитые пути (которых больше нет в 7-ке) - то же самое. И еще пара десятков потенциальных проблем, которые делают автоматическое решение невозможным.
Поиск по процессам perl.exe (или как там у него называется exe), получение параметров командной строки для этого процесса, поиск в ней нужного имени скрипта. Как-то так. Или доработка скрипта, чтобы он создавал lock-файл.
Пишете драйвер, который будет запрещать запуск любых процессов из заданного и радуетесь. Сама ОС, насколько я знаю, не имеет ни потребности, ни возможности так делать.
В общем случае задача решается сборкой двух бинарников: из оригинального и измененного кода. Потом сравниваете результаты. Но если изменения включают добавление/удаление кода или условных переходов - все поплывет и там черт ногу сломит. И вот тогда IDA в руки и смотреть.